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 EOL while scanning string literal问题解决方法
Sep 18 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
python常用知识梳理(必看篇)
Mar 23 Python
利用Python如何制作好玩的GIF动图详解
Jul 11 Python
HTML的form表单和django的form表单
Jul 25 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python对接支付宝支付自实现功能
Oct 10 Python
python 实现IP子网计算
Feb 18 Python
python识别围棋定位棋盘位置
Jul 26 Python
Python之matplotlib绘制饼图
Apr 13 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转换IP地址到真实地址的方法详解
2013/06/09 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
json对象转字符串如何实现
2012/12/02 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
javascript实现数独解法
2015/03/14 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
2015/09/25 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
python提取页面内url列表的方法
2015/05/25 Python
机器学习10大经典算法详解
2017/12/07 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
基于Python 函数和方法的区别说明
2021/03/24 Python
社区党总支书记先进事迹材料
2014/01/24 职场文书
合伙经营协议书
2014/04/18 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
Python保存并浏览用户的历史记录
2022/04/29 Python