1. 程式人生 > >Django REST framework - 視圖

Django REST framework - 視圖

必須 驗證 更新 con 需要 erl 模型 基礎 serialize

目錄

  • Django REST framework 視圖GenericAPIView
    • GenericAPIView
      • 例子
      • 屬性
    • 混入
    • 具體視圖類
      • 自定義基類

Django REST framework 視圖GenericAPIView

GenericAPIView

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

例子

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

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()方法傳遞任何類屬性

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

屬性

基本設置:

以下屬性控制基本視圖行為。

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()。這允許更靈活的行為組合。

mixin類可以從中導入rest_framework.mixins

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.generics

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

Django REST framework - 視圖