装饰器 以及 django 中的应用
装饰器本质上是一个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_protectcsrf_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 中的应用的更多相关文章
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
- Django CBV加装饰器、Django中间件、auth模块
一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...
- Python - 装饰器使用过程中的误区
曾灵敏 - APRIL 27, 2015 装饰器基本概念 大家都知道装饰器是一个很著名的设计模式,经常被用于AOP(面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, C ...
- python装饰器(基础中的重点)
一.简单的装饰器 1.为什么要使用装饰器呢? 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 装饰器的本质:就是一个闭包函数 那么我们先来看一个简单的装饰器:实现计算每个函数的执 ...
- django系列8.5--使用装饰器(视图函数中)实现用户登录状态检验
views.py def session_auth(fn): def inner(request,*args,**kwargs): status = request.session.get('sess ...
- day 51 随机验证码, 验证登陆 ,以及 装饰器在函数中的应用
前端很好的session 的例子 (随机验证码登陆) https://github.com/Endless-Clould/qianduan 参考: 验证码登录 https://www.cnblogs. ...
- python 之 Django框架(Django框架简介、视图装饰器、request对象、Response对象)
12.33 Django框架简介: MVC,全名是Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器( ...
- Django中的视图
Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...
- django ----CBV中加装饰器
CBV中加装饰器 from django import views from django.utils.decorators import method_decorator def login_aut ...
随机推荐
- 自定义Fiddler插件一
上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF.Python代码,然后只需要 ...
- Extjs4.2+webAPI+EF实现分页以及webapi的数据传值
由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下 1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado.net实体数据模型 2.就是后台 ...
- AngularJS+Ionic开发-1.搭建开发环境
临时项目需要使用AngularJS+Ionic+Cordova技术,半年前跟别人用过一段时间做过几个页面,目前别人已经无法联系了,只能我自己上了. 上次做完项目后,想抽时间好好巩固一下这方面的知识面来 ...
- c# 过滤html
public static string StripHTML(string html) { try { System.Text.RegularExpressions.Regex regex1 = ne ...
- Nginx学习笔记(一)---Linux下安装Nginx
1.Nginx介绍 (来自百度,相当之抽象,主要看后面看实例) 2.准备工作 2.1 Nginx安装 官方网站:http://nginx.org/ 2.2.Linux安装 安装工程可参考博客https ...
- HDU5543(SummerTrainingDay03-O DP)
Pick The Sticks Time Limit: 15000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- 在 Ubuntu 18.04 下安装 fcitx 及搜狗拼音输入法
感觉自己傻逼透了,之前在 16.04 时折腾着要装 ibus 和 rime 输入法,现在 18.04 默认安装 ibus 了,又因为 rime 的智能联想太弱,打字不爽,又想装回搜狗一劳永逸... 环 ...
- 2018-02-27 "Literate Programming"一书摘记之一
书到后才发现是Knuth的论文集, 第一篇就在网上: Computer programming as an art (1974). 其中"Taste and Style"(品味和风 ...
- 【读书笔记】iOS-使用SQL数据库保存信息
使用BLOB字段来保存图片是不是一个好的方法还存在争议,小图片除外.更常用的方法是将图片保存为一个文件,然后只在数据中保存图片文件的元数据,比如文件的路径.但是,如果你想把数据文件(初始数据)打包成一 ...
- 《ASP.NET MVC企业实战》(二) MVC开发前奏
在上一篇“<ASP.NET MVC企业级实战>(一)MVC开发前奏”中记录了作者介绍的一些比较实用的VS使用方法以及C#2.0中添加的新特性.本篇继续大概了解之后版本的一些新特性. ...