DRF / APIVIEW사용 하여 게시판 만들기 1 ListAPIVIEW, RetrieveAPIView

김홍준·2021년 9월 3일
0

지난 시간에 VIEWSET으로 만든것과 다르게 APIVIEW를 이용하여 게사판을 만들기 전에
REST API를 다루는 종류에 대한 참고자료이다

참고자료 : https://ssungkang.tistory.com/entry/Django-APIView-Mixins-generics-APIView-ViewSet%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

자 여기서 설명한것과 같이 이번에는 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 를 구현해보자 !

profile
김홍준입니다.

0개의 댓글