django rest 프레임워크의 세 가지 보기 쓰기

10579 단어
1. 기본 뷰 클래스(APIView/@api view)
1. 클래스 베이스 뷰(APIView)
DRF는django의 일반적인view 클래스와 달리 다음과 같은 몇 가지 장점이 있다. *더 좋은 Request 대상을 제공하고 일반적인django Http Request와 달리 더 잘 사용할 수 있다.*Response 객체는 기존의 django Http Response를 대체하여 컨텐트 협상을 관리하고 올바른 렌더링에 대한 응답을 설정합니다.*APIException 예외는 포착되고 적절한 응답을 받습니다.*전송된 요청은 인증과 적당한 권한과 절전 검사를 통해 스케줄러 요청 처리 프로그램을 실행하는 방법입니다.하나의 작은 예:
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authenication, permissions

class ListUser(APIView):
“””

시스템에 있는 모든 사용자를 보여줍니다. * 영패 인증이 필요합니다. *관리자 사용자만 이 보기에 접근할 수 있습니다
"""
authentication_classes = (authentication.TokenAuthentication,)  #       
permission_classes = (permissions.IsAdminUser,) #       

def get(self, requeset, format=None):
"""
        
"""
usernames = [user.username for user in  User.objects.all()]
return Response(usernames)

1) API 정책 속성
다음 API 정책 속성은 APIView에 적용되며 뷰를 제어하는 정책:rendererclasses: 렌더기 클래스 parserclasses: 해석기 클래스 authenticationclasses: 권한 클래스throttleclasses: 절류류permissionclasses: 권한 클래스 콘텐츠negotiation_class: 컨텐트 협상 클래스
2) API 정책 방법
다음 정책 방법은 API 정책에 사용되며 일반적으로 다시 쓰지 않습니다: getrendererrs(self): 렌더링 방법 가져오기getparsers(self): 해석기 획득 방법 getauthenticators(self): 인증 방법이 부족하거나 getthrottles(self): 절전 방법 가져오기getpermissions(self): 권한 획득 방법 getcontent_negotiator(self): 내용 협상 방법 얻기
3) API 정책 구현 방법
다음 방법 이전에는 스케줄러 방법이라고 불렸습니다:checkpermissions(self, request): 권한 검사 checkthrottles(self, request): 절전 체크content_negotiation(self, request, force=False): 컨텐트 협상 확인
4) 스케줄링 방법
이러한 모든 조작은 발생하기 전이나 후에 처리 프로그램 방법을 호출해야 한다.initial(self,request,*args,*kwargs): 모든 조작을 실행하려면 처리 프로그램 방법 이전에 호출되어야 합니다.이 방법은 권한을 집행하고 지출을 절약하며 내용 협상을 집행하는 데 쓰인다.handle_exception(self, exc): 던진 이상 처리 프로그램 방법은 이 방법에 전달되고 응답 실례나re-raises 이상으로 되돌아옵니다.initialize_request(self,request,*args,**kwargs): 요청 대상이 처리 프로그램에 전달되는 방법이 Request의 실례가 아니라django의 HttpRequest finalizeresponse(self,request,response,*args,*kwargs): 모든 응답 처리 프로그램 방법이 되돌아오는 대상이 정확한 내용 형식으로 나타날 수 있도록 합니다
2. 함수 베이스 뷰(@api view()
DRF 역시 django의 일반 보기를 장식하기 위해 다른 함수 기본 보기를 제공합니다. 우리는 요청과response 응답을 받아들이기 위해 Request를 사용할 수 있습니다.하나의 작은 예:
from rest_framework.decorators import api_view

@api_view
def hello_world(request):
return Response({“message”:”Hello world!”})

1)api_view() 사용 방법
이 보기는 기본 렌더링, 해상도, 인증 설정에서 지정한 클래스를 사용합니다.일반적으로 기본적으로 GET 방법만 있고 다른 요청 방법은 405 오류를 보고합니다. 이 장식기에 리퀘스트 방법을 수동으로 추가할 수 있습니다.이렇게
@api_view([‘GET’, ‘POST’])
def hello_world(request):
if request.method  == ‘POST’:
return Response({“message”:”Got some data”, “data”: request.data})
return Response({“messsage”:”Hello world!”})

2) API 정책 장식기
DRF는 @api 에 추가할 수 있는 많은 추가 장식기를 제공합니다view () 뒤에, 예를 들어 특정 사용자가 하루에 한 번만 이 보기를 통과할 수 있도록 절약된 장식기를 추가해야 합니다. @throttleclasses 장식기:
from rest_framework.decorators import api_view, throttle_classes
from rest_framework.throttling import UserRateThrottle

class OncePerDayUserThrottle(UserRateThrottle):
rate = “1/day”

@api_view([‘GET’])
@throttle_classes([OncePerDayUserThrottle])
def view(request):
return Response({“message”:”Hello for to day! see you tomorrow!”})

기타 사용 가능한 API 장식기: @renderererclasses(…) @parser_classes(…) @authentication_classes(…) @throttle_classes(…) @permission_classes(…)
2. 일반 뷰(Generic views)
클래스 보기를 기반으로 하는 주요 장점 중 하나는 다시 사용할 수 있는 행동을 작성할 수 있도록 하는 것이다.REST 프레임워크에서 제공하는 일반적인 보기를 통해 API 관점을 신속하게 구축하여 데이터베이스 모델에 밀접하게 비추도록 합니다.만약 유니버설 보기가 당신이 필요로 하는 API에 맞지 않는다면, 일반적인 APIView 클래스를 사용하거나, 믹스와 기본 클래스가 사용하는 유니버설 보기를 다시 사용해서 그룹을 구성하면 유니버설 보기를 다시 사용할 수 있습니다.
1. 일반 보기
마찬가지로 우리는 일반적인 보기에 클래스 속성을 설정할 수도 있고, 특수한 내용에 따라 내부 보기를 다시 쓸 수도 있다.하나의 작은 예:
from django.contrib.auth.models import User
from myapp.serializers import UserSerializer
from rest_framework import generics
from rest_framework.permissions import IsAdminUser

class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = (IsAdminUser,)

def list(self, request):
# Note the use of get_queryset() instead of self.queryset
queryset = self.get_queryset()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)

urls 설정에서 사용할 수 있습니다.as_views () 를 보기 함수로 변환합니다. 물론 속성도 설정할 수 있습니다.
url(r’^/users/’, ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name=’user-list’)

2. GenericAPIView 일반 뷰 API 참조:
GenericAPIView는 DRF의 APIView 클래스를 계승하여list와detail 보기에 일반적인 요구 행위 방법을 추가했다(queryset 제공).
1) 속성
기본 속성:queryset:query 대상 집합을 되돌려주거나 get 을 사용할 수 있습니다queryset () 방법입니다.serializer_class: 서열화기 클래스, 입력을 검증하고 반서열화하며, 출력을 서열화하는 데 사용해야 합니다.보통 이 속성을 설정하거나 get 를 다시 써야 합니다serializer_class () 방법.lookup_field: 모델의 필드는 실행 대상이 개별 모델의 실례lookup 을 찾는 데 사용됩니다.url_kwarg:URL은 객체에서 키워드 매개변수를 찾는 데 사용해야 합니다.
페이지 나누기 속성:paginationclass: 페이지 목록 보기의 페이지 클래스를 되돌려줍니다. 기본값과 settings에서 설정한DEFAULTPAGINATION_"CLASS 값이 같으면""rest"framework.pagination.PageNumberPagination 페이지 수 필터 속성 설정: filterbackends:queryset의 클래스 목록을 필터하고 settings에서DEFAULT 설정하기FILTER_BACKENDS처럼.
2) 방법
기본 방법:getqueryset ():queryset을 되돌려줍니다.(자세한 내용은 홈페이지 참조)http://www.django-rest-framework.org/api-guide/generic-views/) get_object (): 구체적인 모델 실례 대상을 가져옵니다.저장 및 삭제 연결 방법: 다음 방법은mixins 클래스가 제공하여 간단한 대상을 저장하고 삭제하는 행위를 다시 쓰기:performcreate(self,serializer):CreateModelMixin은 대상을 저장할 때perform업데이트 (self,serializer): Update Model Mixin은 대상을 업데이트할 때performDestroy(self, instance): Destory Model Mixin은 약을 삭제할 때 호출됩니다
3)、Mixins
mixin 클래스는 기본 보기를 제공하는 데 사용되는 조작 행위를 제공합니다.주의, 믹스 클래스는 처리 프로그램 방법을 정의하는 것이 아니라 조작 방법을 제공합니다. 예를 들어.get () 및.post(), 직접이것은 더욱 유연한 조합의 행위를 허용한다.rest 통과하기framework.mixins 인용.ListModel Mixin:list 방법을 제공하고queryset Create Model Mixin을 열거합니다:create 방법을 제공하고,Model 대상을 만들고 저장하고,retrieve 방법을 제공하고,존재하는 모델 대상을 검색하고,Update Model Mixin을 제공합니다:Update 방법을 제공하고,모델 대상을 변경하고,Destroyel Mixin:destroy 방법을 제공하고,모델 대상을 삭제합니다
4)Generic
Generic 유니버설 보기 클래스는 구체적인 조작을 제공하는 유니버설 보기 클래스로Generic로 이해할 수 있습니다.GenericAPIView 및 mixin 클래스의 결합체(restframework.generic.호출
.CreateAPIView:
모델 실례를 만들어post 방법을 제공하는 프로세서는GenericAPIView,CreateModelMixin
.ListAPIView:
모델 실례의 집합은 get 방법 프로세서를 제공합니다:GenericAPIView,ListModelMixin
.RetrieveAPIView:
GenericAPIView, RetrieveModelMixin
.DestoryAPIView:
모델 실례를 삭제하고 delete 방법 프로세서를 제공합니다:GenericAPIView,DestroyModelMixin
.UpdateAPIView:
모델 인스턴스 수정,put 및 patch 메소드 프로세서 상속:GenericAPIView,UpdateModelMixin
.ListCreateAPIView:
모델 실례 집합을 만들고 보여줍니다. get과post 프로세서가 Generic APIView,List Model Mixin,Create Model Mixin에 계승됩니다.
.RetrieveUpdateAPIView:
모델 실례를 읽고 변경하여 get,put,patch 프로세서를 제공합니다:GenericAPIView,RetrieveModelMixin,UpdateModelMixin
.RetrieveDestoryAPIView:
모델 실례를 읽고 삭제하면 get과 delete 프로세서가 계승됩니다:GenericAPIView,RetrieveModelMixin,DestroyModelMixin
.RetrieveUpdateDestroyAPIView:
모델 실례 get,put,patch,delete 프로세서 계승:GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
3. 뷰 컬렉션 ViewSets
Django REST 프레임워크는 하나의 논리적 보기를 하나의 클래스에 설정할 수 있습니다. ViewSet 클래스는 간단한 클래스 기반 관점으로 어떤 처리 프로그램도 제공하지 않습니다.get () 또는.post (), 제공하는 방법 대신. 예를 들어.list() 및 create().하나의 작은 예:
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from myapps.serializers import UserSerializer
from rest_framework import viewsets
from rest_framework.response import Response

class UserViewSet(viewsets.ViewSet):
“””
A simple ViewSet for listing or retrieving users.
“””
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)

def retrieve(self, request, pk=None):
queryset = User.objects.all()
user = get_object_or_404(queryset, pk=pk)
serializer = UserSerializer(user)
return Response(serializer.data)

1).ViewSets 정보
만약 우리가 필요하다면, 우리는 두 개의 GET 요청을 위해 연결 보기를 분리해야 한다:userlist = UserViewSet.as_view({“GET”:’list’}) user_detail = UserViewSet.as_view({‘GET’:’retrieve’})
그러나 보통 우리는 이렇게 하지 않고 등록 루트를 통해 URL을 설정합니다.
from myapp.views import UserViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r’users’, UserViewSet)
urlpatterns = router.urls

아마도 당신은 수동으로 보기 집합을 쓰는 것이 아니라 자신의 모형 데이터를 자주 사용할 것입니다. 그러면 모형 보기 집합인 ModelViewSet을 사용해야 합니다.
class UserViewSet(viewsets.ModelViewSet):
“””
A viewset for viewing and editing user instance
“””
serializer_class = UserSerializer
queryset = User.objects.all()

기타 라우팅 함수 방법:
class UserViewSet(viewsets.ViewSet):
“””
Example empty viewset demonstrating the standard
actions that will be handled by a router class.

If you’re using format suffixes, make sure to also include
the format=None keyword argument for each action.
“””

def list(self, request):
pass

def create(self, request):
pass

def retrieve(self, request, pk=None):
pass

def update(self, request, pk=None):
pass

def partial_update(self, request, pk=None):
pass

def destroy(self, request, pk=None):
pass
                ,              @detail_route @list_route   。
@detail_route(methods=[‘post’], permission_classes=[IsAdminOrIsSelf])
def set_password(self, request, pk=None):
…
      ^users/{pk}/set_password/$      

2) ViewSets의 API 참조
.ViewSet:
APIView를 상속받았습니다. 예를 들어permissionclass,authentication_classes는 보기에 대한 전략을 가지고 있습니다.ViewSet 역시 구체적인 행동 방법을 제공하지 않습니다. 요청 처리 방법을 다시 쓰고 정의할 수 있습니다.대신 기존 APIVIew의 POST, GET 등의 방법을 대체했고, 대신 리스트,create 등의 방법을 사용했다.
.GenericViewSet:
GenericAPIView를 상속하여 기본 getqueryset() 및 getobject () 등 방법으로 모델 데이터를 가져오지만 요청 처리 방법을 제공하지 않습니다.
.ModelViewSet:
GenericAPIView를 계승하여 list(), retrieve(), create() 등 요청 처리 방법을 추가했습니다.
예:
class AccountViewSet(viewsets.ModelViewSet):
“””
A simple ViewSet for viewing and editing accounts
“””
queryset = Account.objects.all()
serializer_class = AccountSerializer
permissions_classes = [IsAccountAdminOrReadOnly]

.ReadOnlyModelViewSet:
GenericAPIView를 계승하여 읽기 전용 요청 처리 방법list()와retrieve()만 추가했습니다.
View 클래스를 사용자화하려면 다음과 같이 하십시오.
GenericAPIView를 상속하여 믹스의 관련 처리 방법을 추가하기만 하면 됩니다.예:
class CreatListRetrieveViewSet(mixins.CreateModelMixin,
mixins.ListModelMixin,
mixins.RetrieveModelMixin,
View.GenericViewSet):
pass

좋은 웹페이지 즐겨찾기