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的源码浅要剖析Python的内存管理
Apr 16 Python
virtualenv实现多个版本Python共存
Aug 21 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
Python3解释器知识点总结
Feb 19 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
Django用户身份验证完成示例代码
Apr 03 Python
pytorch 常用函数 max ,eq说明
Jun 28 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中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
python解析xml文件操作实例
2014/10/05 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
Python中的进程分支fork和exec详解
2015/04/11 Python
python类装饰器用法实例
2015/06/04 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python开发的实用计算器完整实例
2017/05/10 Python
Python 加密的实例详解
2017/10/09 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python底层封装实现方法详解
2020/01/22 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
社区志愿者心得体会
2014/01/03 职场文书
促销活动总结报告
2014/04/26 职场文书
校庆标语集锦
2014/06/25 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
寒假生活随笔
2015/08/15 职场文书
公证书
2019/04/17 职场文书