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 可爱的大小写
Sep 06 Python
Python 多进程和数据传递的理解
Oct 09 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python3 判断列表是一个空列表的方法
May 04 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
基于python3生成标签云代码解析
Feb 18 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
Mar 24 Python
python实现股票历史数据可视化分析案例
Jun 10 Python
python 远程执行命令的详细代码
Feb 15 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP和.net中des加解密的实现方法
2013/02/27 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
Yii框架表单模型和验证用法
2016/05/20 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
JS跨域代码片段
2012/08/30 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python简单生成随机数的方法示例
2018/03/31 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
python安装scipy的方法步骤
2019/06/26 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
2020/10/20 Python
python脚本定时发送邮件
2020/12/22 Python
门卫岗位安全职责
2013/12/13 职场文书
关于安全的标语
2014/06/10 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
普通党员整改措施
2014/10/24 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
如何将numpy二维数组中的np.nan值替换为指定的值
2021/05/14 Python
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python