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中的reduce内建函数使用方法指南
Aug 31 Python
简单的Apache+FastCGI+Django配置指南
Jul 22 Python
详解python中的文件与目录操作
Jul 11 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
python实现Decorator模式实例代码
Feb 09 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
keras多显卡训练方式
Jun 10 Python
如何卸载python插件
Jul 08 Python
Python 中random 库的详细使用
Jun 03 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制作静态网站的模板框架
2006/10/09 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
Python基于滑动平均思想实现缺失数据填充的方法
2019/02/21 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
机械系毕业生求职信
2014/05/28 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
调任通知
2015/04/21 职场文书
2015年酒店年度工作总结
2015/05/23 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
oracle索引总结
2021/09/25 Oracle