• 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。

    # 简单的 装饰器

    from functools import wraps # 装饰器修复

    def wrapper(func):
    @wraps(func) # 装饰器修复
    def inner(*args, **kwargs):
    # 执行函数前的操作
    ret = func(*args, **kwargs)
    # 执行函数后的操作
    return ret
    return inner @wrapper # 加装饰器
    def func():
    print("Hello Word!") # 有开关的 装饰器
    flag = True # 通过 T 或 F 判断是否使用装饰器 def outher(flag):
    def wrapper(func):
    @wraps(func) # 装饰器修复
    def inner(*args, **kwargs):
    if flag:
    return func(*args, **kwargs)
    # 执行函数前的操作
    ret = func(*args, **kwargs)
    # 执行函数后的操作
    return ret
    return inner
    return wrapper @outher(flag)
    def func():
    print("Hello Word!")
  • 给CBV 加装饰器 --->>> 给 类 及 方法 加装饰器

    from django.views import View

    from django.utils.decorators import method_decorator

    import time

    # 计算执行时间
    def timer(func):
    def inner(request, *args, **kwargs):
    start = time.time()
    ret = func(request, *args, **kwargs)
    end = time.time()
    print('时间:{}'.format(end - start))
    return ret
    return inner 给类加装饰器 要 制定 name='方法名'
    # @method_decorator(timer, name='post')
    # @method_decorator(timer, name='get')
    class AddPublisher(View):
    # http_method_names = ['get'] @method_decorator(timer)
    def get(self, request):
    return render(request, '***.html') @method_decorator(timer)
    def post(self, request): return self.get(request)
  • Django 中自带的装饰器

    from django.views.decorators.csrf import csrf_exempt, csrf_protect

    csrf_exempt
    给视图加上装饰器后,当前的视图不需要CSRF校验 csrf_protect
    给视图加上装饰器后,当前的视图需要CSRF校验 确保浏览器带有cookie的两种方式:
    > 在form表单内加入 {% csrf_token %}
    > 不使用{% csrf_token %},导入
    from django.views.decorators.csrf import ensure_csrf_cookie

    ensure_csrf_cookie
    以装饰器形式加在视图上,保证返回的相应有cookie

装饰器 以及 django 中的应用的更多相关文章

  1. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

    CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...

  2. Django CBV加装饰器、Django中间件、auth模块

    一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...

  3. Python - 装饰器使用过程中的误区

    曾灵敏 - APRIL 27, 2015 装饰器基本概念 大家都知道装饰器是一个很著名的设计模式,经常被用于AOP(面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, C ...

  4. python装饰器(基础中的重点)

    一.简单的装饰器 1.为什么要使用装饰器呢? 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 装饰器的本质:就是一个闭包函数 那么我们先来看一个简单的装饰器:实现计算每个函数的执 ...

  5. django系列8.5--使用装饰器(视图函数中)实现用户登录状态检验

    views.py def session_auth(fn): def inner(request,*args,**kwargs): status = request.session.get('sess ...

  6. day 51 随机验证码, 验证登陆 ,以及 装饰器在函数中的应用

    前端很好的session 的例子 (随机验证码登陆) https://github.com/Endless-Clould/qianduan 参考: 验证码登录 https://www.cnblogs. ...

  7. python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)

    12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...

  8. Django中的视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  9. django ----CBV中加装饰器

    CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...

随机推荐

  1. 基于tcp协议下粘包现象和解决方案,socketserver

    一.缓冲区 每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区.write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送 ...

  2. .net项目技术选型总结

    做.net开发已经几年了,也参与开发了很多大大小小的项目,所以现在希望总结出一套开发.net项目的常用技术,也为以后做项目技术选型的时候作为参考. 数据库 小型项目:SQLite(工具) 中大型项目: ...

  3. C# 语言历史版本和特性

    C# 语言版本和对应特性,以及发布时间,.Net Framework 版本和 VS 版本 C# 4.0 和C# 5.0 熟悉点吧, VS10 ,VS12 和13 .Net Framework 4.0 ...

  4. mapreduce的cleanUp和setUp的特殊用法(TopN问题)和常规用法

    一:特殊用法 我们上来不讲普通用法,普通用法放到最后.我们来谈一谈特殊用法,了解这一用法,让你的mapreduce编程能力提高一个档次,毫不夸张!!!扯淡了,让我们进入正题: 我们知道reduce和m ...

  5. CentOS配置VSFTP服务

    1.安装vsftpd a.查看是否安装vsftp [root@wsyjlly ~]# rpm -q vsftpd package vsftpd is not installed b.如果没有则安装vs ...

  6. 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例

    Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...

  7. mysql常见操作语句,建表,增删改查

    用户操作 新建用户 grant 权限 on 数据库.表名 to 用户名@'访问地址' identified by "密码"; 新建一个可以远程访问数据库的用户 test, 密码:p ...

  8. 配置supervisor管理beego应用

    一.golang.beego等环境安装与配置 二.supervisor安装 github项目地址:https://github.com/Supervisor/supervisor 克隆项目:git c ...

  9. Spring全家桶系列–SpringBoot之AOP详解

    //本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关 ...

  10. JAVA的高并发基础认知 二

    一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...