믹스인(Mixins)
믹스인(Mixins)은 Django Rest Framework(DRF)에서 제공하는 기능으로, View의 특정 동작을 재사용 가능한 방식으로 구성하는 데 사용됩니다. 믹스인은 클래스 기반 View(Class-Based Views, CBV)의 기능을 확장하고 커스터마이징하는 데 매우 유용합니다.
기본 CRUD 믹스인의 활용
DRF는 기본적으로 CRUD(Create, Read, Update, Delete) 작업을 수행하기 위한 믹스인을 제공합니다. 이러한 믹스인은 제네릭 View와 함께 사용되어, 각각의 CRUD 작업을 수행하는 View를 빠르게 생성할 수 있게 해줍니다.
**#views.py**
from rest_framework import mixins, generics
from .models import Animal
from .serializers import AnimalSerializer
class AnimalList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
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 AnimalDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
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)
#urls.py
from django.urls import path
from . import views
urlpatterns = [
path('animals/', views.AnimalList.as_view()),
path('animals/<int:pk>/', views.AnimalDetail.as_view()),
]
이렇게 하면 각 View는 특정 CRUD 작업을 수행할 수 있게 됩니다.
커스텀 믹스인 작성하기
커스텀 믹스인을 작성하면, View의 동작을 커스터마이징하고 재사용할 수 있습니다. 커스텀 믹스인은 일반적으로 파이썬 클래스로 정의되며, View 클래스에 믹스인으로 추가됩니다.
**#views.py**
from rest_framework import mixins, generics
from .models import Animal
from .serializers import AnimalSerializer
class AnimalList(LoggingMixin, mixins.ListModelMixin, mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
def get(self, request, *args, **kwargs):
self.log_request(request)
response = self.list(request, *args, **kwargs)
self.log_response(response)
return response
def post(self, request, *args, **kwargs):
self.log_request(request)
response = self.create(request, *args, **kwargs)
self.log_response(response)
return response
이렇게 믹스인을 활용하면, View의 동작을 모듈화하고 재사용할 수 있으며, View의 로직을 더욱 쉽게 조직화하고 확장할 수 있습니다. 믹스인은 DRF의 강력한 기능 중 하나로, View를 더욱 효율적이고 유지 관리가 쉽게 만들어줍니다.
5.7 믹스인(Mixins)
믹스인(Mixins)은 Django Rest Framework(DRF)에서 제공하는 기능으로, View의 특정 동작을 재사용 가능한 방식으로 구성하는 데 사용됩니다. 믹스인은 클래스 기반 View(Class-Based Views, CBV)의 기능을 확장하고 커스터마이징하는 데 매우 유용합니다.
기본 CRUD 믹스인의 활용
DRF는 기본적으로 CRUD(Create, Read, Update, Delete) 작업을 수행하기 위한 믹스인을 제공합니다. 이러한 믹스인은 제네릭 View와 함께 사용되어, 각각의 CRUD 작업을 수행하는 View를 빠르게 생성할 수 있게 해줍니다.
**#views.py**
from rest_framework import mixins, generics
from .models import Animal
from .serializers import AnimalSerializer
class AnimalList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
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 AnimalDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
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)
#urls.py
from django.urls import path
from . import views
urlpatterns = [
path('animals/', views.AnimalList.as_view()),
path('animals/<int:pk>/', views.AnimalDetail.as_view()),
]
이렇게 하면 각 View는 특정 CRUD 작업을 수행할 수 있게 됩니다.
커스텀 믹스인 작성하기
커스텀 믹스인을 작성하면, View의 동작을 커스터마이징하고 재사용할 수 있습니다. 커스텀 믹스인은 일반적으로 파이썬 클래스로 정의되며, View 클래스에 믹스인으로 추가됩니다.
**#views.py**
from rest_framework import mixins, generics
from .models import Animal
from .serializers import AnimalSerializer
class AnimalList(LoggingMixin, mixins.ListModelMixin, mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Animal.objects.all()
serializer_class = AnimalSerializer
def get(self, request, *args, **kwargs):
self.log_request(request)
response = self.list(request, *args, **kwargs)
self.log_response(response)
return response
def post(self, request, *args, **kwargs):
self.log_request(request)
response = self.create(request, *args, **kwargs)
self.log_response(response)
return response
이렇게 믹스인을 활용하면, View의 동작을 모듈화하고 재사용할 수 있으며, View의 로직을 더욱 쉽게 조직화하고 확장할 수 있습니다. 믹스인은 DRF의 강력한 기능 중 하나로, View를 더욱 효율적이고 유지 관리가 쉽게 만들어줍니다.
5.8 인증과 권한
Django Rest Framework(DRF) 내의 인증과 권한은 보안의 핵심 구성요소로 작용합니다. 인증은 사용자의 신원을 확인하는 단계이며, 권한은 인증된 사용자가 실행할 수 있는 동작을 결정합니다.
DRF의 인증 방법:
DRF는 여러 인증 방법을 제공합니다. 몇몇 주요 인증 방법은 아래와 같습니다.
- 기본 인증(Basic Authentication): 기본 인증은 사용자 이름과 비밀번호를 이용해 사용자를 인증합니다.
- 토큰 인증(Token Authentication): 토큰 인증은 사용자에게 고유한 토큰을 제공하고, 이 토큰으로 사용자를 인증합니다.
- 세션 인증(Session Authentication): 세션 인증은 Django의 세션 프레임워크를 활용해 사용자를 인증합니다.
- OAuth: OAuth는 외부 서비스를 통해 사용자를 인증하는데 사용됩니다.
- 또한 인증 클래스를 만들어 사용자 정의 인증 방식을 구현할 수 있습니다.
권한 설정 및 사용 예
권한은 사용자가 수행할 수 있는 동작을 제어합니다. DRF는 다양한 권한 클래스를 제공하며, 사용자 정의 권한 클래스를 만들 수도 있습니다. 기본 권한 설정은 아래와 같습니다.
- 모든 사용자 허용(AllowAny): 모든 사용자에게 접근을 허용합니다.
- 인증된 사용자(IsAuthenticated): 인증된 사용자에게만 접근을 허용합니다.
- 관리자 사용자(IsAdminUser): 관리자 사용자에게만 접근을 허용합니다.
- 인증된 사용자 또는 읽기 전용(IsAuthenticatedOrReadOnly): 인증된 사용자에게만 쓰기 접근을 허용하고, 모든 사용자에게 읽기 접근을 허용합니다.
**#views.py**
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
class AnimalAuthenticatedView(APIView):
permission_classes = [IsAuthenticated]
def Animal(self, request):
content = {'message': '이 메시지는 인증된 사용자만 볼 수 있습니다.'}
return Response(content)
위 코드에서 View는 IsAuthenticated 권한 클래스를 사용하여 인증된 사용자에게만 접근을 허용합니다.
CustomPermission 클래스를 만들어 has_permission 메소드를 오버라이드함으로써 사용자 정의 권한 로직을 구현할 수 있습니다. 그런 다음 View에서 CustomPermission 클래스를 사용하여 권한을 적용할 수 있습니다.
**#views.py**
from rest_framework.views import APIView
from rest_framework.response import Response
from .permissions import CustomPermission
class AnimalCustomPermissionView(APIView):
permission_classes = [CustomPermission]
def get(self, request):
content = {'message':
'사용자 정의 권한을 통과한 사용자만 이 메시지를 볼 수 있습니다.'}
return Response(content)
이러한 방식으로 DRF에서 인증과 권한을 설정함으로써, API의 보안을 강화하고 사용자의 접근을 제어할 수 있습니다.
'BackEnd' 카테고리의 다른 글
PowerShell 명령어 인식 오류 해결 방법: 초보자도 쉽게 따라 할 수 있는 팁 (0) | 2024.09.24 |
---|---|
DRF 설명서 개념 때려잡기 : 페이징 및 필터링, 예외처리 (1) | 2024.09.19 |
[DRF 설명서 개념 따라잡기] DRF View와 ViewSet (0) | 2024.09.17 |
[DRF 설명서 개념따라잡기] FBV와 CBV 언제 어떤 것을 사용해야 할까? (1) | 2024.09.16 |
[DRF설명서 개념 때려잡기] DRF VIEW의 이해 및 API View와 Generic View 알아보기 (0) | 2024.09.15 |