본문 바로가기
W | eb

Django CRUD: Optimized

by 덞웖이 2024. 10. 9.

환경

- 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

'W | eb' 카테고리의 다른 글

Django CRUD: HTTP2  (0) 2024.10.10
Django CRUD: HTTP1  (0) 2024.10.09
Django CRUD: API  (0) 2024.10.09
Django CRUD: Serialize  (0) 2024.10.08
Django CRUD: Admin  (1) 2024.10.08