• 装饰器本质上是一个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. Hibernate小解惑.

      1.什么是SessionFactory?什么是Session?httpsession和hibernate的session的有什么区别?     SessionFactory接口负责初始化Hiber ...

  2. 站在DevOps肩膀上的TestOps(一)

    一十一 发表于 2018-03-14 15:50:03 TestOps   摘要: DevOps团队的职责是“无摩擦发展”. 这是对“速度需求”驱动的发展理念的一种渴望,以及有意识地去除从概念到客户的 ...

  3. 【代码笔记】Web-ionic 网格(Grid)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. 【读书笔记】iOS-自定义URL Scheme注意事项

    如果两个不同的应用注册了同样的URL Scheme,那么后安装的应用会响应符合这种协议格式的URL. 如果你的应用的iPhone和iPad版是各自独立的(即不是Universal类型的),那么你就不应 ...

  5. html中用href 实现点击链接弹出文件下载对话框

    浏览器支持能够打开的格式,他都会默认直接在线打开(比如word或图片),不支持的格式,他就会弹出下载提示.最好是做成.rar格式.xlsx的文件.浏览器自带下载功能. <body> < ...

  6. 性能测试 Apache参数配置与性能调优

    Apache性能调优 by:授客 QQ:1033553122 环境: Apache 2.4 1.选择合适的MPM(Multi -Processing Modules, 多处理模块) Unix/Linu ...

  7. .Net Core(三)MVC Core

    MVC Core的改动感觉挺大的,需要的功能大多从Nuget安装,还内置了IOC,支持SelfHost方式运行等等. 一.项目结构的变化创建的新MVC项目的结构发生了变化,比如:静态文件需要统一放置到 ...

  8. 国网SGCC_UAP 反编译.class文件源代码

    SGCC_UAP和eclipse操作方式差不多,对于用惯了IDEA和Android Studio的人来说非常不方便,按住Ctrl点击类名不能查看源码. 因为jar包下都是.class文件,所以需要安装 ...

  9. Android中的padding和margin的区别

    在Android的布局中,常常有人将padding和margin搞混,他们其实不一样的,padding是该控件的内部距离. magin是该控件与其他控件之间的距离.例如 <LinearLayou ...

  10. Android 裁剪人脸

    人脸裁剪类 public final class FaceCj { private static BitmapFactory.Options BitmapFactoryOptionsbfo; priv ...