Django에서는 여러방식으로 view를 구성할 수 있다. 대표적으로 크게 나누자면 FBV, CBV로 나눠진다
FBV (Function Based View)
api_view 데코레이터를 받아서 구성된다.
@api_view(['GET','POST'])
def answer_view(requests):
if requests.method == "GET":
return get_answer_view(request)
elif requests.method == "POST":
return post_answer_view(request)
def get_answer_view(request):
question = models.Question.objects.all()
serializer = serializer.BoxQuestionSerializer(queryset, many=True)
return Response(
{
"success": 1,
"results": serializer.data,
},
status=status.HTTP_200_OK
)
CBV (Class Based View)
클래스 기반뷰도 2가지로 나뉜다.
base views, Generic display views
base views는 rest_framework.views의 APIView를 상속받아서 진행된다.
class AnswerAPIView(APIView):
def get(self, request, *args, **kwargs):
answer = models.answer.objects.all()
serializer = serializer.BoxQuestionSerializer(answer, many=True)
return Response(
{
"success": 1,
"results": serializer.data,
},
status=status.HTTP_200_OK
)
그리고 viewset을 이용하는 방법도 있다. 단 뷰셋을 사용하게될경우엔 url에서 DefaultRouter를 호출해서 url을 등록해줘야 한다.
router = DefaultRouter()
from rest_framework.routers import DefaultRouter
from django.urls import path, include
from . import viewsets
app_name = "box"
router = DefaultRouter()
router.register("", viewsets.AnswerViewsets, basename="box")
urlpatterns = router.urls
class AnswerViewsets(viewsets.ModelViewSet):
queryset = models.answer.objects.all()
serializer_class = serializer.BoxQuestionSerializer
Generic display views는 rest_framework의 generics을 상속받아 진행된다.
get_queryset = 해당 함수에서 기본 쿼리셋이 진행된다.
permission_class = 각 뷰별로 권한을 지정할 수 있다.
class AnswerListView(generics.ListAPIView):
serializer_class = serializers.BoxQuestionSerializer
permission_classes = [permission.UserCheck]
def get_queryset(self):
queryset = models.Question.objects.all()
return queryset
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
serializer = self.get_serializer(queryset, many=True)
return Response(
{
"success": 1,
"results": serializer.data,
},
status=status.HTTP_200_OK
)
'아카이브' 카테고리의 다른 글
이슈 트래커에 대하여 (0) | 2021.07.22 |
---|---|
Django - 실습편 JWT (4) (0) | 2021.06.08 |
Django - 실습편 model (2) (0) | 2021.06.08 |
Django - 실습편 기본세팅 (1) (0) | 2021.06.08 |
ruby on rails - 실습 세팅편(1) (0) | 2021.06.03 |