22.通用视图GenericAPIView、属性和方法
#源码
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
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、属性和方法的更多相关文章
- django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析
一.GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为. 提供的每个具体通用视图都是一个GenericAPIView或多个mixin类 ...
- javascript - 所有的视图属性和方法(offsetHeight、clientHeight、scrollHeight、innerHeight等)
注意:本文只简单的介绍了各个视图的属性和方法.如果想要知道兼容性或者更多,请至文章底部参考链接处. 本文内容分为五大部分: Window视图属性 innerHeight 和 innerWidth ou ...
- 基于类的通用视图(Class-based generic views)
在web开发中,最令人头痛的就是一遍又一遍的重复固定的模式.在解决了模板层面和模型层面的重复代码之痛之后,Django使用通用视图来解决视图层面的代码重复. 扩展通用视图 毫无疑问通用视图可以大幅度地 ...
- Django 基于类的通用视图
在早期,我们认识到在视图开发过程中有共同的用法和模式.这时我们引入基于函数的通用视图来抽象这些模式以简化常见情形的视图开发. 基于函数视图的用法有以下三种: def index(request): r ...
- Android零基础入门第22节:ImageView的属性和方法大全
原文:Android零基础入门第22节:ImageView的属性和方法大全 通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开 ...
- Django通用视图APIView和视图集ViewSet的介绍和使用
原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630 1.APIView DRF框架的视图的基类是 ...
- Django通用视图APIView和视图集ViewSet的介绍和使用(Django编程-1)
1.APIView DRF框架的视图的基类是 APIView APIView的基本使用和View类似 Django默认的View请求对象是 HttpRequest,REST framework 的请求 ...
- 用基于类的通用视图处理表单(Class-based generic views)
处理表单通常包含3步: 初始化GET(空白的后者预填充的表单) POST非法数据(通常重新显示带有错误信息的表单) POST合法数据(提交数据并重定向) 为了将你从这些烦人的重复步骤中解救出来,Dja ...
- winFrom 常用控件属性及方法介绍
目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...
随机推荐
- 基于 DolphinScheduler 的数据质量检查实践
今天给大家带来的分享是基于 Apache DolphinScheduler 的数据质量检查实践,分享的内容主要为以下四点: " 为什么要做数据质量检查? 为什么要基于 DolphinSche ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???
1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求,也可以截获各种智能手机发出的HTTP/ HTTPS 请求. Fiddler 能捕获Android 和 Windows Phone 等 ...
- Luogu1137 旅行计划 (拓扑排序)
每次入队时DP : \(f[v] = \max \{f[u] + 1\}\) #include <iostream> #include <cstdio> #include &l ...
- 一种比css_scoped和css_module更优雅的避免css命名冲突小妙招
css_scoped 与 css_module 我们知道,简单的class名称容易造成css命名重复,比如你定义一个class: <style> .main { float: left; ...
- django_day10_项目相关
django_day10_项目相关 展示数据的方法 数据对象obj 普通字段 obj.字段名 ====> 数据库该字段的值 带choices参数的 obj.字段名 ====> 数据库该字段 ...
- Springboot连接数据库(解决报错2)
好家伙, 新建项目,不出意外的话总是会出点意外的 第一天正常运行,第二天就炸了. 1.看报错 百度一下找解决方案 试着将 application.properties中的 com.mysql.jdbc ...
- MariaDB数据库 主-从 部署
〇.前言 好久没碰数据库了 准备环境: centos7自带的MariaDB,没有的话下面是安装命令 yum install -y mariadb mariadb-server systemctl re ...
- 【面试题】JS使用parseInt()、正则截取字符串中数字
JS使用parseInt()和正则截取字符串中数字 点击打开视频讲解更加详细 parseInt() 函数 定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 当参数 radix ...
- Openstack Neutron:三层技术和实现
目录 - 1.Neutron 三层技术简介 - 2.集中式router - 1.在节点上安装L3 agent - 2.配置外部网络 - 3.通过CLI或者Horizon 来创建路由 - 4.连接租户网 ...
- Spring Boot 整合Hibernate Validator
Spring Boot 整合Hibernate Validator 依赖 <dependencies> <dependency> <groupId>org.spri ...