1,步骤:

  1,自定义装饰器  

  1. # 我们自定义的装饰器:
  2. def my_decorator_1(func):
  3. def wrapper(request, *args, **kwargs):
  4. print('自定义装饰器被调用了')
  5. print('请求路径%s' % request.path)
  6. return func(request, *args, **kwargs)
  7. return wrapper

  

  2,定义Mixin扩展类(该类一定要继承object类,一定要重写as_view()函数)

  1. # 定义的 Mixin 扩展类:
  2. class FirstMixin(object):
  3. @classmethod
  4. def as_view(cls, *args, **kwargs):
  5. view = super().as_view(*args, **kwargs)
  6. view = my_decorator_1(view)
  7. return view

  

  3,定义类视图,继承自:扩展类 + View (该类视图就是要装饰的视图,View一定要放在最后)

  (可以参考类继承顺序的调用,理解super().as_view的调用)

  1. # 定义的类视图, 继承自: 扩展类 + View
  2. class DemoView(FirstMixin, View):
  3. def get(self, request):
  4. print('demoview get')
  5. return HttpResponse('demoview get')
  6.  
  7. def post(self, request):
  8. print('demoview post')
  9. return HttpResponse('demoview post')

多个Mixin扩展类的连用

  1. # 我们自定义的装饰器:
  2. def my_decorator_1(func):
  3. def wrapper(request, *args, **kwargs):
  4. print('自定义装饰器被调用了')
  5. print('请求路径%s' % request.path)
  6. return func(request, *args, **kwargs)
  7. return wrapper
  8.  
  9. # 我们自定义的装饰器:
  10. def my_decorator_2(func):
  11. def wrapper(request, *args, **kwargs):
  12. print('自定义装饰器被调用了')
  13. print('请求路径%s' % request.path)
  14. return func(request, *args, **kwargs)
  15. return wrapper
  16.  
  17. class FirstMixin(object):
  18. """ FirstMixin 扩展类 """
  19. @classmethod
  20. def as_view(cls, *args, **kwargs):
  21. view = super().as_view(*args, **kwargs)
  22. view = my_decorator_1(view)
  23. return view
  24.  
  25. class SecondMixin(object):
  26. """ SecondMixin 扩展类 """
  27. @classmethod
  28. def as_view(cls, *args, **kwargs):
  29. view = super().as_view(*args, **kwargs)
  30. view = my_decorator_2(view)
  31. return view
  32.  
  33. class DemoView(FirstMixin, SecondMixin, View):
  34. def get(self, request):
  35. print('demoview get')
  36. return HttpResponse('demoview get')
  37.  
  38. def post(self, request):
  39. print('demoview post')
  40. return HttpResponse('demoview post')

mixin 扩展类的装饰的更多相关文章

  1. django-rest-framework框架 第二篇 之Mixin扩展类

    Mixin扩展类     ['列表操作','过滤','搜索','排序'] <一>:<1>创建项目: 配置 urls 主路由    配置model文件(举个例子,就以book为模 ...

  2. django class类即视图类添加装饰器的几种方法

    根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 第一种:定义函数装饰器,在函数,类中使用函 ...

  3. rest_framework视图基类与五个扩展类

    1. 两个基类 1)APIView rest_framework.views.APIView APIView是REST framework提供的所有视图的基类,继承自Django的View父类. AP ...

  4. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  5. GenericAPIView的使用及和视图扩展类的结合使用

    GenericAPIView的使用 from rest_framework.generics import GenericAPIView GenericAPIView继承 APIView,主要增加了操 ...

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

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

  7. DRF (Django REST framework) 中的视图扩展类

    2. 五个扩展类 1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法 ...

  8. DRF中五大扩展类及视图集的介绍

    五个扩展类 (1)ListModelMixin 列表视图扩展类,提供list(request, *args, **kwargs)方法快速实现列表视图,返回200状态码. 该Mixin的list方法会对 ...

  9. GenericAPIView类与几个扩展类的综合使用

    五个扩展类 扩展类 作用 封装的方法 状态码(成功,失败) ListModelMixin 查询多条数据 list 200 CreateModelMixin 新增一条数据 create 201,400 ...

随机推荐

  1. maven手动添加jar包到pom仓库

    此处以顺丰jar包为例: mvn install:install-file -Dfile=D:\TSBrowserDownloads\SF-CSIM-EXPRESS-SDK-V1.-\SF-CSIM- ...

  2. ajax技术实现登录判断用户名是否重复以及利用xml实现二级下拉框联动,还有从数据库中获得

    今天学了ajax技术,特地在此写下来作为复习. 一.什么是ajax? 客户端(特指PC浏览器)与服务器,可以在[不必刷新整个浏览器]的情况下,与服务器进行异步通讯的技术  即,AJAX是一个[局部刷新 ...

  3. Python IAQ中文版 - Python中少有人回答的问题

    Python中少有人回答的问题 The Python IAQ: Infrequently Answered Questions 1 Q: 什么是"少有人回答的问题(Infrequently ...

  4. java基础之和String相关的一些转换

      String虽然不是java的基本数据类型,但使用的频率却非常之高,可以说是很常见了. 列举几个常见的关于String的转换,写的有点过于简洁,欢迎纠错和补充   1.Object和String的 ...

  5. SpringMvc问题记录-Controller对于静态变量的访问分析

    问题描述 在于朋友的讨论中分析到一种场景,即:Controller对于一个类中的静态变量进行访问时,如果第一个接口修改该静态变量的数据,另外一个接口获取该静态变量的数据,那么返回的结果是什么? 操作步 ...

  6. 正则表达式在Java中使用

    正则表达式 定义 用一组特殊的字符来描述一组字符串的格式 用于验证字符串是否满足格式 不关心字符串的内容是否有效 1. 基本正则表达式所谓正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式 ...

  7. Laravel 5 中文文档 CHM 版

    使用 Microsoft HTML Help Workshop 做了一个 Laravel 5.4 中文文档的 CHM 版本. 百度网盘下载地址:http://pan.baidu.com/s/1dFN2 ...

  8. 【JavaScript】 直接下载保存文件

    //直接下载保存文件 function Download(filePath) { // 如果中间IFRAME不存在,则添加 if (!document.getElementById("_SA ...

  9. win7环境搭建以太坊私链

    如何创建私链: 创建创世配置文件: 首先需要创建一个“创世”json配置文件,此文件描述了创世区块的一些参数.下面就是文件中的内容: { "coinbase": "0x0 ...

  10. 安装Office Visio 提示Office 16 Click-to-Run Extensibility Component

    今天在安装 Office Visio 2016 时,点击安装程序,出现以下错误:   出现这个问题的原因就是你的电脑以前安装过32位的office,卸载时,注册表没有清理干净. 解决方案: 在win1 ...