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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
Python iter()函数用法实例分析
Mar 17 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python2与Python3的区别实例分析
Apr 11 Python
详解Python3 基本数据类型
Apr 19 Python
python下的opencv画矩形和文字注释的实现方法
Jul 09 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
python学习笔记之多进程
Aug 06 Python
Python os和os.path模块详情
Apr 02 Python
python使用BeautifulSoup 解析HTML
Apr 24 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中日期加减法运算实现代码
2011/12/08 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
php metaphone()函数及php localeconv() 函数实例解析
2016/05/15 PHP
JS 树形递归实例代码
2010/05/18 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
nodejs aes 加解密实例
2018/10/10 NodeJs
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
Python语言的变量认识及操作方法
2018/02/11 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
python实现websocket的客户端压力测试
2019/06/25 Python
Django CBV类的用法详解
2019/07/26 Python
Python实现数值积分方式
2019/11/20 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
巴西购物网站:Estrela10
2018/12/13 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
校三好学生主要事迹
2014/01/11 职场文书
英语感恩演讲稿
2014/01/14 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
自荐信的格式
2014/03/10 职场文书
青春无悔演讲稿
2014/05/08 职场文书
参赛口号
2014/06/16 职场文书
大一新生检讨书
2014/10/29 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL