Django REST framework - 視圖

Django REST framework 視圖GenericAPIView

GenericAPIView

這個類擴展了REST框架的APIView類,經過GenericAPIView與一個或多個mixin類組合而構建的api

例子

在使用通用視圖時,將覆蓋原視圖,並設置多個類屬性app

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,)

多對多的關係下框架

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)

特別簡單的狀況下還能夠經過`.asview()方法傳遞任何類屬性iview

url(r'^/users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list')

屬性

基本設置:

如下屬性控制基本視圖行爲。post

1. `queryset` - 爲今後視圖中返回的對象的查詢集, 一般必需設置.若是要覆蓋此視圖,須要調用`get_queryset()`方法
2. `serializer_class` - 用於驗證和反序列化輸入以及序列化輸出的序列化程序類。一般,您必須設置此屬性,或覆蓋該`get_serializer_class()`方法。
3. `lookup_field` - 應該用於執行單個模型實例的對象查找的模型字段。默認爲'`pk`'。請注意,使用超連接的API時,您須要確保雙方的API意見和串行類設置查找字段,若是你須要使用一個自定義值。
4. `lookup_url_kwarg` - 應該用於對象查找的URL關鍵字參數。URL conf應包含與此值對應的關鍵字參數。若是未設置,則默認使用與之相同的值`lookup_field`。

混入

mixin類提供用於提供基本視圖行爲的操做。請注意,mixin類提供了操做方法,而不是直接定義處理程序方法,例如.get()和.post()。這容許更靈活的行爲組合。url

mixin類能夠從中導入rest_framework.mixinsrest

LisrModelMixin - 提供一種.list(request, *args, **kwargs)實現列出查詢集的方法。

CreateModelMixin - 提供.create(request, *args, **kwargs)實現建立和保存新模型實例的方法。

RetrieveModelMixin - 提供一種.retrieve(request, *args, **kwargs)方法,該方法實如今響應中返回現有模型實例。

UpdateModelMixin - 提供一種.update(request, *args, **kwargs)方法,用於實現更新和保存現有模型實例。

DestoryModelMixin - 提供.destroy(request, *args, **kwargs)實現刪除現有模型實例的方法。

具體視圖類

在混入類的基礎上進行封裝, 若是不須要大量的自定義行爲,能夠從中導入視圖rest_framework.genericscode

CreateAPIView

用於僅建立端點。
提供post方法處理程序。

ListAPIView

用於只讀端點以表示模型實例的集合。
提供get方法處理程序。

RettieveAPIView

用於只讀端點以表示單個模型實例。
提供get方法處理程序。

UpdateAPIAView

用於單個模型實例的僅更新端點。
提供put和patch方法處理程序。

ListCrrateAPIView

用於讀寫端點以表示模型實例的集合。
提供get和post方法處理程序。

RetrieveUpdateAPIView

用於讀取或更新端點以表示單個模型實例。
提供get,put而且patch方法處理。

RetrieveDestroyAPIView

用於讀取或刪除端點以表示單個模型實例。
提供get和delete方法處理程序。

RetrieveUpdateDestroyAPIView

用於讀寫 - 刪除端點以表示單個模型實例。
提供get,put,patch和delete方法處理。

自定義基類

若是您在多個視圖中使用mixin,則能夠更進一步,建立本身的一組基本視圖,而後能夠在整個項目中使用。例如:對象

class BaseRetrieveView(MultipleFieldLookupMixin,
                       generics.RetrieveAPIView):
    pass

class BaseRetrieveUpdateDestroyView(MultipleFieldLookupMixin,
                                    generics.RetrieveUpdateDestroyAPIView):
    pass

https://img2018.cnblogs.com/blog/1479869/201901/1479869-20190114220105178-568867006.png

相關文章
相關標籤/搜索