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

相关文章
相关标签/搜索