• 装饰器本质上是一个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. docker使用技巧小记

    1.在使用docker的时候有很多人习惯使用官方镜像.有的人喜欢自己制作镜像,有的时候都是使用默认的配置启动的服务,或者自己在制作镜像的时候直接将配置文件打包到镜像里面了.有的时候会碰到要修改配置文件 ...

  2. 记一次升级Tomcat

    总述     JDK都要出12了,而我们项目使用的jdk却仍然还停留在JDK1.6.为了追寻技术的发展的脚步,我这边准备将项目升级到JDK1.8.而作为一个web项目,我们的容器使用的是Tomcat. ...

  3. Jackson解析XML

    使用Jackson maven项目的pom.xml依赖 <dependency> <groupId>com.fasterxml.jackson.dataformat</g ...

  4. NLog基础配置

    <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nl ...

  5. [android] 手机卫士保存安全号码

    调用ListView对象的setOnItemClickListener()方法,设置条目的点击事件,参数:OnItemClickListener对象 使用匿名内部类实现,重写onClick()方法,传 ...

  6. Tomcat报failed to parse the expression [${xxx}]异常(javax.el.ELException)的解决方法

    Tomcat 7 'javax.el.ELException' 的解决方式tomcat 7对EL表达式的语法要求比较严格,例如"${owner.new}"因包含关键字new就会导致 ...

  7. CDN使用心得:加速双刃剑

    文章图片存储在GitHub,网速不佳的朋友,请看<CDN 使用心得:加速双刃剑> 或者 来我的技术小站 godbmw.com 本文以腾讯云平台的 CDN 服务为例,记录下在个人网站开发和公 ...

  8. Vue 系列之 渲染与事件处理

    渲染相关 列表渲染 与 条件渲染 Vue 中的常见的渲染有 列表渲染 和 条件渲染 所谓条件渲染,则是通过添加一定的逻辑条件来进行 Dom 元素的操作 v-if v-else v-else-if &l ...

  9. display: flex; 布局

    废话不多说,供上我学习Flex布局的启蒙文章,一切的答案,尽在这里,仔细阅读,多多回味!保证你有所收获! http://www.ruanyifeng.com/blog/2015/07/flex-gra ...

  10. Python 练习: 简单角色游戏程序

    要求: 1.创建三个游戏人物,分别是: 苍井井,女,18,初始战斗力1000 东尼木木,男,20,初始战斗力1800 波多多,女,19,初始战斗力2500 2.游戏场景,分别: 草丛战斗,消耗200战 ...