Django小技巧15: 使用基于类视图的Mixins Posted November 05, 2018 ?...翻译整理自: simpleisbetterthancomplex.com 今天讲述三点关于 Mixins 使用的一些规范: Django 提供的View 保持在继承的最右边....Mixins 在基本视图的左侧 Mixins 应该继承Python的内置对象类型(object)....Django 1.9开始, 内置的LoginRequiredMixin和UserPassesTestMixin....如果你要在视图中使用它们, 它们始终位于最左侧: Python Mixins在左,View在后 class DocumentUpdateView(LoginRequiredMixin, FormMessageMixin
前言 django中编辑视图views.py有两种方式,一种是基于类的实现,另外一种是函数式的实现方式,两种方法都可以用。...REST框架提供了一个APIView类,它是Django View类的子类。...View与APIView的区别 View是Django默认的视图基类,APIView是REST framework提供的所有视图的基类, 继承自Django的View。...的View 先使用django自带的view,获取一个Card表里面的卡号信息: models.py设计card表 # models.py class Card(models.Model): '...import View import json # 作者:上海悠悠,QQ交流群:750815713 class CardListView(View): '''基于django的view实现获取
内建基于类的视图的API 基于类的视图的API 参考。另请参见基于类的视图 的简介。...TodayArchiveView DateDetailView 基于类的视图的Mixins Simple mixins ContextMixin TemplateResponseMixin Single...基于类的视图在URL 模式中的部署使用as_view() 类方法: urlpatterns = [ url(r'^view/$', MyView.as_view(size=42)), ] 视图参数的线程安全性...传递给as_view() 的参数将赋值给服务请求的实例。利用前面的例子,这表示对MyView的每个请求都可以使用 self.size。...参数必须对应于在类中已经存在的属性(hasattr 检查可以返回True)。 基础视图 VS. 通用视图 基于类的基础视图可以认为是父视图,它们可以直接使用或者继承它们。
1.使用Django View实现商品列表 下面实现通过View类直接将商品信息显示到前端。..., 即基于类的视图)方式编码。...三、DRF的使用 1.DRF的Request和Response类 DRF对Django的Request和Response类进行了进一步的封装,因此使用起来更方便。...过滤的使用 通过django-filters的DjangoFilterBackend类实现字段过滤。...搜索的使用 DRF的SearchFilter类基于Django-admin的搜索功能,支持简单的基于单个查询参数的搜索。
0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带的views类 drf框架中最基础的视图类:views.APIView drf框架中工具视图:generics GenericAPIView...django自带的views进行相关方法的分装 二.viewsets视图集 ViewSetMixin:视图集工具 - 重写as_view - 将 请求方式 映射到视图类中的 指定方法 我们在路由中 类名....as_view({'get': 'retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型类有关的接口视图集 - 可以从mixins那继承功能,也可以自定义功能...,*args,**kwargs) 不过再执行这些操作的时候依然要给与generics视图一样的两个参数,且创建的视图类必须继承其方法的类为父类 五.generics中继承GenericAPIView的子类使用
类基础视图(APIView) 不同于django常规的view类,优点: * 提供了更好用的request对象,不同于普通的django HttpRequest更好用。...函数基础视图(@api_view()) 一种函数基础视图来装饰django的普通视图,我们同样可以使用request来接受请求和response响应。...1)api_view()使用方法 这个视图将使用默认渲染器、解析器、身份验证设置中指定的类等。...REST框架提供的通用视图允许快速构建API观点紧密地映射到数据库模型,如果通用视图不适合的需要API, 可以使用常规APIView类,或重用mixin和基类使用的通用视图来组成自己的组可重用通用视图。...list()和retrieve() 自定义View类:只需要继承GenericAPIView, 增加mixins的相关处理方法。
基于类的通用视图(GV) Django 引入了基于类的通用视图, 来处理 web 常见的用例需求, 比如创建新对象,表单处理,列表视图,分页,归档视图等....通用视图的实现, 使用大量的 mixins. 这一点, 仁者见仁智者见智. 可以查看基于类的通用视图-扁平索引 , 来查看所有的视图的方法. 它非常实用,建议把 这个页面放到浏览器书签栏里....#2 观点 「仅使用django.views.generic.View, 不用GV」 此观点认为, View 就足够了, 并且 View 是真正的CBV, 而通用视图则不是真正的 CBV....(多重继承) 单独的类方法处理 HTTP 方法 内置的基于类通用视图 缺点 可读性差 隐式代码流 隐式mixins及父类代码 装饰器的使用需要额外的导入或方法覆盖 选择哪一种都没有对错, 这一切取决于你的项目背景和需求以及对以后代码扩展性的考虑...Django 官方的建议是: 如果你难以将自己的视图实现为通用视图(重点是generic views)的子类, 那么你直接使用基于 View 的视图或功能视图, 只编写你所需的代码更更加有效.
入门:视图及模版》 《django入门:Admin管理系统及表单》 《django入门:通用视图类重构视图》 在《用django写接口(入门篇)》提到这篇会讲 views 的代码优化,在这之前,我们先适当了解下...参考 django 表单部分) Response 是一种 TemplateResponse 采用未呈现的内容,通过内容协商来确定正确的内容类型以返回给客户端,用法直接 return Response...(data) 即可 了解完 Request 和 Response 我们将分别通过 @api_view,APIView 和通用视图类对 view 进行一些改造 api_view 注解重构 # ....import...delete(self, request, *args, **kwargs): return self.destroy(self, request, *args, **kwargs) 通用的基于类重构...,重构 url 首先我们通过继承 ViewSet 来重构 view 类 class PostViewSet(viewset.ModelViewSet): queryset = Post.objects.all
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...from django.views import View from rest_framework import views, generics, mixins, viewsets REST framework...传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。...:该视图类中的基类 mixins 视图工具集: RetrieveModelMixin:retrieve 单取 ListModelMixin:list 群取 CreateModelMixin:create...django 自带的 views 进行相关方法的封装 二、APIView 实现 get post put delete等 继承django自带views的 View,可以处理 request 和 response
经过大家的努力,现在已经有了很多成熟的接口文档标准和生成工具,其中 OpenAPI Specification[1] 就是一个被广泛接收和使用的标准,我们博客接口使用的文档自动化工具,也会基于 OpenAPI...我们将使用它来生成博客应用的接口文档。...="schema-redoc"), ] 只需要使用 get_schema_view 就可以生成一个文档视图,然后我们将这个视图函数映射到了 4 个 URL。...和 redoc 都是基于这个标准文档来生成可视化的 UI 界面的。...完善文档 drf-yasg 毕竟不是使用人工智能开发的,即使是使用人工智能,也很难做到 100% 的正确,毕竟由人类写的代码可能是千变万化的,工具无法预料到所有可能的情况,一旦它遇到无法处理的地方,自动生成的文档就可能出错
mixins.CreateModelMixin, GenericAPIView): """ Concrete view for listing...,不能合并 有相同的get方法 两个类视图所对应的url地址不一致 再次优化 优化思路:使用动作来触发,而不是请求方法 from rest_framework import viewsets viewsets...将两个类合成一个类 修改url from django.urls import pathfrom projects import viewsurlpatterns = [ path('project...中 View DRF中 APIView GenericAPIView mixins扩展类 CreateAPIView(合并拓展类) 视图集 action和请求方法的映射 ViewSet GenericViewSet...」 将自动生成的路由添加到列表中 from django.urls import path, includefrom projects import viewsfrom rest_framework import
0x00 引言 官方文档:http://www.django-rest-framework.org/ drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析。...首先,我们看一下主要的几种view以及他们之间的关系。 ? 这其中,还涉及了mixins,主要也分为5类: ?...0x01 django View 首先,我们使用django自带的view,获取一个课程的列表: # drf是通过json的格式进行数据交互的,所以这里也返回json数据 import json from...django.views.generic.base import View from django.core import serializers from django.http import HttpResponse...,强烈建议在做drf的时候,使用ViewSet与mixins方法结合进行开发,为我这种小白开发者提供了很强大完整的功能!
刚开始写views.py模块的代码,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don't Repeat Yourself)设计原则: ?...使用APIView rest_framework.views.APIView是DRF封装的API视图,继承了django.views.generic.base.View: ?..., cls.dispatch, assigned=()) return view 使用mixins DRF提供了rest_framework.mixins模块,封装了类视图常用的增删改查方法:...换句话说,mixin类提供了一些方法,我们不会直接用这些方法,而是把它添加到其他类来使用。 还是有点抽象。 再简单点说,mixin只不过是实现多重继承的一个技巧而已。 这下应该清楚了。...东方说 学到这里,已经开始感受到了Django REST framework的强大之处了,我觉得学一个框架,不仅要看如何使用,还需要了解它的设计思路和底层实现,这样才能更好的总结为自己的编程思想,写出更漂亮的代码
目录 新建项目 创建model,并且生成数据表 创建序列化文件 view里面的代码 第三级url的路径 第三级view代码的书写(继承) 第3.5级的view 第四级的view 页面展示HTML格式的代码...局部权限控制 新建项目 和helloWord项目一样,就是建项目,搭建Djangorest的项目,现在因为是做代码片段高亮显示的项目,所以,需要一个新表,所以我们需要在model.py里面写一个实体类...创建model,并且生成数据表 from django.db import models # Create your models here. # 以下的都是官网复制过来的 from pygments.lexers...就是继承serializers.ModelSerializer,就是这个,一定要记住 view里面的代码 第三级url的路径 from django.conf.urls import url from...() serializer_class = SnippetSerializer # 访问这个类的 权限的控制 permission_classes = (permissions.IsAuthenticatedOrReadOnly
工具视图都是 GenericAPIView 的子类,不同的子类继承不同工具类,重写请求方法。 ?...二、Viewsets:视图集 1.简单使用 DRF 提供了 Viewsets.py 视图集,再次封装之前的操作。....*)/$', views.BookGenericViewSet.as_view({'get':'get_obj'})), ] 2.ModelViewSet:最全的封装类 查看源码 class ModelViewSet...GenericAPIView 视图类 GenericView 继承 GenericAPIView 视图类 适用于标准的接口请求,或实现标准的 Model 类操作接口。...APIView 视图类 ViewSet 继承 APIView 视图类 实现不需要 Model 类操作,或非标准的 Model 类操作接口。
官方文档:http://www.django-rest-framework.org/ drf为我们提供强大的通用view的功能,本博客对这些view进行简要的总结分析。...首先,我们看一下主要的几种view以及他们之间的关系。 ? 这其中,还涉及了mixins,主要也分为5类: ? 下面我们以课程(course)作为一个例子,对view进行一个总结。...1. django View 首先,我们使用django自带的view,获取一个课程的列表: # drf是通过json的格式进行数据交互的,所以这里也返回json数据 import json from...django.views.generic.base import View from django.core import serializers from django.http import HttpResponse...,强烈建议在做drf的时候,使用ViewSet与mixins方法结合进行开发,为我这种小白开发者提供了很强大完整的功能!
,一般都是用def定义的函数视图,不过DRF更推荐使用class定义的类视图,这能让我们的代码更符合DRY(Don’t Repeat Yourself)设计原则: 使用APIView rest_framework.views.APIView...是DRF封装的API视图,继承了django.views.generic.base.View: 我们用它把函数视图改写成类视图,编辑snippets/views.py: from snippets.models...=()) return view 1234567891011121314151617181920 使用mixins DRF提供了rest_framework.mixins模块,封装了类视图常用的增删改查方法...换句话说,mixin类提供了一些方法,我们不会直接用这些方法,而是把它添加到其他类来使用。 还是有点抽象。 再简单点说,mixin只不过是实现多重继承的一个技巧而已。 这下应该清楚了。...东方说 学到这里,已经开始感受到了Django REST framework的强大之处了,我觉得学一个框架,不仅要看如何使用,还需要了解它的设计思路和底层实现,这样才能更好的总结为自己的编程思想,写出更漂亮的代码
path('docs/', include_docs_urls(title='API document')), ] 2.3 文档描述说明的定义位置 单一方法的视图,可直接使用类视图的文档字符串 class...post: 新建主机. """ 对于视图集ViewSet,仍在类视图的文档字符串中分开定义,但是应使用action对应的名称进行区分 class HostInfoViewSet(mixins.ListModelMixin...2.0规范的API文档自动化生成工具,能够生成比原生swagger更为友好的API文档界面 目前的兼容性如下 Django Rest Framework: 3.10, 3.11, 3.12 Django...4.6 更多配置及说明 4.6.1 get_schema_view的配置 函数 get_schema_view 的作用是返回自动生成 API 文档的视图类, 该函数接受以下参数: info: Swagger...: 用于schema view进行登录认证的类 permission_classes: 用于schema view进行权限校验的类 4.6.2 SchemaView 的配置 通过函数get_schema_view
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式。...P\d+)$', views.PublishDetailViewSet.as_view(),name="publish_detail"), ] 视图三部曲 使用混合(mixins) 上一节的视图部分...def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) 使用通用的基于类的视图...通过使用mixin类,我们使用更少的代码重写了这些视图,但我们还可以再进一步。...django的request类和rest-framework的request类的源码解析 局部视图 from rest_framework.parsers import JSONParser,FormParser
OTP 避免了一些静态密码认证相关系的缺点,不容易受到重放攻击,比如常见的注册场景,用户的邮箱或短信会收到一条一次性的激活链接,或者收到一次随机的验证码(只能使用一次),从而验证了邮箱或手机号的有效性。...3、验证,是否是 5 分钟之内的验证码,是否正确,如果是,则放行。否则提示用户。 为了验证验证码及其时效,我们需要把发送验证码的时间和对应的邮箱记录下来,那么就需要设计一张表来存储。...,借助于 Django REST framework 框架的 GenericViewSet 和 CreateModelMixin 即可实现 view 类,代码都有详细的注释,你很容易就看明白: from...,也就是 User 的 view 类的 create 操作来实现注册。...Serializers 类不是必须的,你可以完全自己实现验证和数据保存及序列化,只不过这样会导致 View 类特别臃肿,不够优雅,不易维护。
领取专属 10元无门槛券
手把手带您无忧上云