generics.ListCreateAPIView
#源码
class ListCreateAPIView(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericAPIView):
"""
Concrete view for listing a queryset or creating a model instance.
"""
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
# 使用
# 导入generics
from rest_framework import generics
from ..models.models import Post # 模型类
from ..serializers import postSerializer # 序列化器 class PostList(generics.ListCreateAPIView):
# 指定查询集
queryset = Post.objects.all()
# 指定序列化类
serializer_class = postSerializer
 
从源码可以看出,generics.ListCreateAPIView继承了mixins.ListModelMixin, mixins.CreateModelMixin,GenericAPIView,里面写好了get和post方法使用了混合类的list和create方法,所以我们使用的时候,只需要定义queryset和serializer_calss,然后直接发送get、post请求就可以完成请求,如果需要功能扩展,可以重写get、post方法
 
GenericAPIView
 GenericAPIView继承APIView,将APIView的属性方法重 写扩展,并提供了一些新的方 属性
 
属性
 queryset
"""
必须指定,用于从视图返回对象的查询结果集,通常,你必须设置此属性或者重写get_queryset()方法,
如果你重写了一个视图的方法,你应该调用get_queryset()而不是直接访问该属性,因为queryset将被计算一次
这些结果将为后续请求存储起来
"""
class PostList(generics.ListCreateAPIView):
# 指定查询集
queryset = Post.objects.all()
# 指定序列化类
serializer_class = postSerializer # 如果需要,可以重写queryset过滤一遍
def get_queryset(self):
...
def list(self, request):
queryset = self.get_queryset() # 获queryset查询结果集
 
serializer_class
"""
用户验证和反序列化输入以及用户序列号输出的serializer类,通常,你必须设置此属性或者重写get_serializer_class()方法
"""
class PostList(generics.ListCreateAPIView):
# 指定查询集
queryset = Post.objects.all()
# 指定序列化类
serializer_class = postSerializer
# 如果有需求重写
def get_serializer_class(self):
if self.request.user.is_staff:
return postSerializer
return gettSerializer def list(self,requerst):
queryset = self.get_queryset()
serializer = self.get_serializer(queryset,many=True) # 获取serializer序列化器
lookup_field
"""
用于执行各个model实例的对下查找的model字段,默认为pk
注意:在使用超链接API时,如果需要使用自定义的值,需要确保在API和序列化类中都设置查找字段
"""
#url
path('run/<int:code>/', PostListDetail.as_view()), #视图
class PostListDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Post
serializer_class = postSerializer
#不指定lookup_field ,默认就是pk,传值时只能是pk
def get(self, request, pk):
#APIView 不能使用get_object()方法获取参数值
#继承APIView的其他扩展View,可以使用get_objcet()方法获取参数值,也可以直接传值
#指定lookup_field ,传值就是指定的值
lookup_field = 'test'
def get(self, request, test):
lookup_url_kwarg
"""
用于对象查找url关键字参数,他的url conf应该包括这应该与这个指相对于的关键字参数,如果取消设置
默认情况下使用与lookup_field相同的值
"""
#url
path('run/<str:code>/', PostListDetail.as_view()),
#视图
class PostListDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Post
serializer_class = postSerializer
lookup_url_kwarg = 'code'
# 如果url内不包含lookup_url_kwarg的值,则会报错
get_queryset()
"""
返回list视图中使用的查询集,该查询集还用做detail视图中的查找基础,默认返回由queryset属性指定的查询集
平时我们应该多使用这个方法,而不是直接访问self.queryset,因为self.queryset只会被提交一次
然后这些结果将为后续请求缓存起来,该方法可能会被重写以提供动态行为
"""
get_object()
"""
返回用于detail视图的对象实例,默认使用look_up_field参数过滤基本的查询集
该方法可以被重写以提供更复杂的行为,例如基于多个url参数的对象查找
"""
 
filter_queryset
"""
给定一个queryset,使用任何过滤器后端进行过滤,返回一个新的queryset
"""
 

22.通用视图GenericAPIView、属性和方法的更多相关文章

  1. django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析

    一.GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为. 提供的每个具体通用视图都是一个GenericAPIView或多个mixin类 ...

  2. javascript - 所有的视图属性和方法(offsetHeight、clientHeight、scrollHeight、innerHeight等)

    注意:本文只简单的介绍了各个视图的属性和方法.如果想要知道兼容性或者更多,请至文章底部参考链接处. 本文内容分为五大部分: Window视图属性 innerHeight 和 innerWidth ou ...

  3. 基于类的通用视图(Class-based generic views)

    在web开发中,最令人头痛的就是一遍又一遍的重复固定的模式.在解决了模板层面和模型层面的重复代码之痛之后,Django使用通用视图来解决视图层面的代码重复. 扩展通用视图 毫无疑问通用视图可以大幅度地 ...

  4. Django 基于类的通用视图

    在早期,我们认识到在视图开发过程中有共同的用法和模式.这时我们引入基于函数的通用视图来抽象这些模式以简化常见情形的视图开发. 基于函数视图的用法有以下三种: def index(request): r ...

  5. Android零基础入门第22节:ImageView的属性和方法大全

    原文:Android零基础入门第22节:ImageView的属性和方法大全 通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开 ...

  6. Django通用视图APIView和视图集ViewSet的介绍和使用

    原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630   1.APIView DRF框架的视图的基类是 ...

  7. Django通用视图APIView和视图集ViewSet的介绍和使用(Django编程-1)

    1.APIView DRF框架的视图的基类是 APIView APIView的基本使用和View类似 Django默认的View请求对象是 HttpRequest,REST framework 的请求 ...

  8. 用基于类的通用视图处理表单(Class-based generic views)

    处理表单通常包含3步: 初始化GET(空白的后者预填充的表单) POST非法数据(通常重新显示带有错误信息的表单) POST合法数据(提交数据并重定向) 为了将你从这些烦人的重复步骤中解救出来,Dja ...

  9. winFrom 常用控件属性及方法介绍

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

随机推荐

  1. HDU3085 Nightmare Ⅱ (双向BFS)

    联赛前该练什么?DP,树型,状压当然是爆搜啦 双向BFS就是两个普通BFS通过一拼接函数联系,多多判断啦 #include <iostream> #include <cstdio&g ...

  2. java-面向对象之类、对象

    什么是类?什么是对象? 1)现实世界是由很多很多对象组成的基于对象抽出了类 2)对象:真实存在的单个的个体 类:类别/类型,代表一类个体 3)类中可以包含: 3.1)所有对象所共有的属性/特征---- ...

  3. 关于python如何引用excel文件

    关于python如何引用excel文件 import pandas as pd #引用pandas库,as:将pandas简写为pd Nowcoder = pd.read_excel("1. ...

  4. PerfView专题 (第九篇):洞察 C# 中的 LOH 内存碎片化

    一:背景 在 内存泄漏 的系列问题中,有一类问题是 内存碎片化 导致的,而且这种更容易发生在 LOH 上,因为它默认不开启 对象压缩,一般遇到这种情况,优先让朋友执行下面的代码应急. GCSettin ...

  5. 面试突击77:Spring 依赖注入有几种?各有什么优缺点?

    IoC 和 DI 是 Spring 中最重要的两个概念,其中 IoC(Inversion of Control)为控制反转的思想,而 DI(Dependency Injection)依赖注入为其(Io ...

  6. 《Java基础——继承》

    Java基础--继承     一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...

  7. VLAN的配置

    1 vlan的概念和作用 虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能.部门等因素将它们组织起来.相互之间的通信就好像它们在同一个网段中一样. 虚拟 ...

  8. Latex中也能展示动态图?

    技术背景 在学术领域,很多文档是用Latex做的,甚至有很多人用Latex Beamer来做PPT演示文稿.虽然在易用性和美观等角度来说,Latex Beamer很大程度上不如PowerPoint,但 ...

  9. Linux查看文件内容和压缩文件命令

    查看文件内容 一些重要的目录: /usr/share/    帮助文档.说明文档/var/log/       日志/var/run/       运行中程序/var/tmp       临时文件 根 ...

  10. 2.Python环境搭建

    Python是一个跨平台.可移植的编程语言,因此可在windows.linux/unix和Mac os x系统中安装使用.安装完成后,你会得到Python解释器环境,一个命令行交互环境,一个简单的集成 ...