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 - 视图的更多相关文章

  1. Django Rest Framework 视图和路由

    Django Rest Framework 视图和路由   DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们 ...

  2. python 全栈开发,Day96(Django REST framework 视图,django logging配置,django-debug-toolbar使用指南)

    昨日内容回顾 1. Serializer(序列化) 1. ORM对应的query_set和ORM对象转换成JSON格式的数据 1. 在序列化类中定义自定义的字段:SerializerMethodFie ...

  3. [Django REST framework - 视图组件之视图基类、视图扩展类、视图子类、视图集]

    [Django REST framework - 视图组件之视图基类.视图扩展类.视图子类.视图集] 视图继承关系 详图见文章末尾 视图组件可点我查看 两个视图基类:APIView.GenericAP ...

  4. 03 Django REST Framework 视图和路由

    01-DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别 ...

  5. Django REST framework视图

    混合类阶段(封装2次) 路由: url(r'school/$', views.SchoolView.as_view()), url(r'school/(?P<pk>\d+)/$', vie ...

  6. Django rest framework (视图类详解)

    官网:https://www.django-rest-framework.org/api-guide/viewsets/ 在django rest framework 视图中一共有N个类 第一类:AP ...

  7. Django REST framework基础:视图和路由

    DRF中的Request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别于Dj ...

  8. Django rest framework(8)---- 视图和渲染器

    django rest framework 之视图 序列化器    PagerSerialiser from rest_framework import serializers from api im ...

  9. Django Rest framework 之 视图

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

随机推荐

  1. 尊重百度的api语音合成规则

    屏幕显示字幕内容与形式 和  字幕的播放时长分离 : 去除标点符号的影响 # 设置分句的标志符号:可以根据实际需要进行修改 # cutlist = ".!?".decode('ut ...

  2. 创建FTP服务

    Step1: Create a FTP folder in your C disk, named “AutomationReport” Step2:  Install IIS components. ...

  3. android5.1 Recovery添加从U盘升级功能【转】

    本文转载自:http://blog.csdn.net/tfslovexizi/article/details/73835594 之前看到过一个人写了4.4上添加U盘升级功能的博客http://blog ...

  4. [python基础] python生成wordcloud并保存

    1.核心包 #jieba.pandas用来处理数据,数据源以xls格式存储的,这里用pandas进行处理import jieba from jieba import analyse import pa ...

  5. web跨域问题回顾

    晚上看spring web源码时看到了cors包,查了一下原来是在4.2之后新加的用来更方便让web应用服务支持cors协议的.于是有了下面几个问题. web跨域问题的起源是因为浏览器为了安全而遵循的 ...

  6. bzoj1407

    扩展欧几里得 我们发现其实就是两个野人在自己的寿命内不会相遇,或者永远不会相遇,那么我们枚举m,然后枚举两个人,看是否符合条件 扩展欧几里得ax+by=c,这里c不能取模,a能取模,具体不想了 #in ...

  7. bzoj4753

    bzoj4753 树形dp+01分数规划 这是一个典型的树形背包+01分数规划.看见分数形式最大就应该想到01分数规划. 于是套用分数规划,每次用树形背包检验. 首先这是一棵树,不是一个森林,所以我们 ...

  8. Knights of the Round Table(Tarjan+奇圈)

    http://poj.org/problem?id=2942 题意:n个武士,某些武士之间相互仇视,如果在一起容易发生争斗事件.所以他们只有满足一定的条件才能参加圆桌会议:(1)相互仇视的两个武士不能 ...

  9. Gym - 101982B 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) B. Coprime Integers Mobius+容斥 ab间gcd(x,y)=1的对数

    题面 题意:给你 abcd(1e7),求a<=x<=b,c<=y<=d的,gcd(x,y)=1的数量 题解:经典题目,求从1的到n中选x,从1到m中选y的,gcd(x,y)=k ...

  10. Python细节(一)深浅拷贝

    深浅拷贝 只要涉及拷贝,就会涉及创建新对象 浅拷贝,会创建一个新的容器,列表中的元素和原列表的元素用的是同一个内存空间 第一种方法:从头切到尾,完整的复制一份 lst = [1,2,3,4] lst1 ...