환경
- Ubuntu Server 22.04
- VSCode Insider
- Remote SSH Extension
- Python 3.10 venv
- Django 5.1.1
- SQLite 3.37.2
준비
source django_env/bin/activate
실행
polls_api/views.py
### generics 사용
from rest_framework import generics
from polls.models import Question
from polls_api.serializers import QuestionSerializer
# generics.xxxAPIView 안에 다 있었다 ...😤
class QuestionList(generics.ListCreateAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
### THOUGHTS: 복잡한 기능의 뷰가 필요 없을때 빨리 쓸수 있는 듯 + 클린코드
### 이름부터가 generic
### mixins 사용한 것은 아래 코드블럭 참조
polls_api/urls.py
from django.urls import path
from .views import *
urlpatterns = [
path('question/', QuestionList.as_view(), name='question-list'),
# pk for generic api view
path('question/<int:pk>/', QuestionDetail.as_view(), name='question-detail')
]
mixins를 사용한 views.py
from rest_framework import generics, mixins
from polls.models import Question
from polls_api.serializers import QuestionSerializer
# genericAPIView내용을 보면 genericAPIView 하나로도 해결가능 할 듯😮
class QuestionList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
# implicit
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class QuestionDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
CRUD is short for Crush, Ruin, Undermine and Destroy