지난 시간에 VIEWSET으로 만든것과 다르게 APIVIEW를 이용하여 게사판을 만들기 전에
REST API를 다루는 종류에 대한 참고자료이다
자 여기서 설명한것과 같이 이번에는 generics안에있는
각종 APIVIEW를 사용하여 각각 구분하여 뷰를 만들어 볼예정이다
#post(appname)/view.py
from django.shortcuts import render, get_object_or_404
from rest_framework.response import Response
from .models import *
from rest_framework import viewsets
from .serializer import *
from django.http import HttpResponse
from rest_framework.generics import ListAPIView, RetrieveAPIView, UpdateAPIView, DestroyAPIView, CreateAPIView
# 지난 시간에 import 한 것과 새로 import한 것이 섞여있다. 중간중간 비교해주기 위해 모두 import해주자
class PostViewSet(ListAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
이렇게 위에서 import 해준 ListAPIView 를 상속받아서 post-list를 보여주는 역할을 할 클래스를 생성한다
Post를 받아와주고
PostSerializer 또한 받아와준다
PostSerializer는 지난시간에 만들었던것이다. 이건 변경 사항 없이 써주자
이 것 외에 view.py에서는 변경사항은 없고
urls.py로 가보자
urlpatterns = [
#path('', include(router.urls)),
# ( 뷰셋을 이용했던 url) >무시
path('', PostViewSet.as_view(), name='post_list'),
이와 같이 위의 path는 주석처리해주고
아래의 주소를 다시 세팅해준다
PostViewset클래스를 호출하는 것이고
as_view는 클래스형 view를 쓸때는 항상 붙혀준다
이렇게 되면 List는 끝이다. 화면을 보자
전과 같이 이렇게 잘 뜨는 것을 볼수있다.
( 결과는 같지만 내부적으로는 전혀 다르다 )
다음은 상세페이지이다.
view.py로 다시 와서
class Post_detail(RetrieveAPIView):
lookup_field = 'id'
queryset = Post.objects.all()
serializer_class = Post_detailSerializer
위에서 import 해주었던 RetrieveAPIView 상속받아 Post_detail을 만들어주고 http에서 들어오는 id값을 받아 상세 페이지를 구현해준다
Post_detailSerializer는 아직 만들지 않았는데 만들어보자
class Post_detailSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = '__all__'
다를거 없이 이렇게 따로 만들어준다.
마지막으로 알겠지만 urls 를 설정해준다
path('detail/<int:id>/', Post_detail.as_view(), name='post_detail'),
이렇게 하면 끝이다 runserver해보자
마찬가지로 이렇게 뜨는 것을 볼수있다.
오늘은 여기까지 다음시간엔 update와 delete 를 구현해보자 !