Flask框架各种常见装饰器示例


Posted in Python onJuly 17, 2018

本文实例讲述了Flask框架各种常见装饰器。分享给大家供大家参考,具体如下:

效果类似django的process_request的装饰器

@app.before_request
def before(*args,**kwargs):
  print('请求之前')
  '''
  如果允许通过访问,可以return None
  该装饰器装饰的函数如果有return其他内容则直接结束访问,
  效果有点类似django的process_reqeust中间件方法。
  比如通过这个装饰器写登陆验证,判断其是否有session,没有则不允许访问,有则继续访问
  然后通过request.path判断访问的函数,如果是登陆(白名单)则通过。
  request.url 是完整的url
  request.path是域名后面的url正则
  '''
  if request.path == '/login':
    return None
  user = session.get('user_info')
  if user:
    return None
  return redirect('/login')

类似process_response

@app.after_request
def after(response):
  #效果和process_response是一样的,必须有返回值,没有则报错。
  print('我走了')
  return response

flask中间件装饰器执行顺序。

如果多个app.before_requestapp.after_request

那么执行顺序也和django类似,

app.before_request是按照从上而下执行(文件的上下),app.after_request是自下而上执行。

如果在app.before_requestreturn了其他内容,请求被拦截,那么不会执行视图函数,

直接从最后一个app.after_reqeust倒着开始执行所有after_request

自定义错误页面:

@app.error_handlers(404)
def error_404(arg):
  '''自定义错误页面,根据状态码定制'''
  return "404错误啦"

模板中定制方法:

前端直接调用后端函数的装饰器:

@app.template_global()
def xx(a1,a2):
  return a1+a2
'''
这个装饰器的作用就是,可以在前端直接通过{{ xx(1,2)}}来调用后端的这个函数。
'''

相当于filter的装饰器

@app.template_filter()
def db(a1,a2,a3):
  return a1+a2+a3
'''
效果和django的Filter相似,前端渲染的时候需要注意写法
{{ 1|db(2,3)}} 1是第一个参数,后面是2,3参数。
'''

第一次来请求操作的装饰器:

@app.before_first_request
def first(*args,**kwargs):
  pass
'''
只有第一次请求时候才执行的函数装饰器
'''

Flask的中间件一般感觉用处不大,不如装饰器方便

Flask框架各种常见装饰器示例

通过重新复制app.wsgi_app

重写这个类的__call__方法,如上图,只是增加了两个打印,效果同process_request,process_response

更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
基于python的Tkinter实现一个简易计算器
Dec 31 Python
Python时间模块datetime、time、calendar的使用方法
Jan 13 Python
Python模拟用户登录验证
Sep 11 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python实现大转盘抽奖效果
Jan 22 Python
python远程邮件控制电脑升级版
May 23 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
python3读取autocad图形文件.py实例
Jun 05 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
详解基于django实现的webssh简单例子
Jul 17 #Python
Python爬虫之网页图片抓取的方法
Jul 16 #Python
python编辑用户登入界面的实现代码
Jul 16 #Python
python 反向输出字符串的方法
Jul 16 #Python
解决python3 urllib 链接中有中文的问题
Jul 16 #Python
如何用Python实现简单的Markdown转换器
Jul 16 #Python
详解python里的命名规范
Jul 16 #Python
You might like
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
Textarea根据内容自适应高度
2013/10/28 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
vue项目中引入vue-datepicker插件的详解
2019/05/14 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
2020/11/05 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
车间组长岗位职责
2013/12/20 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
学生安全责任书范本
2014/07/24 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Go语言编译原理之源码调试
2022/08/05 Golang