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绘图方法实例入门
May 19 Python
python妹子图简单爬虫实例
Jul 07 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
分享一个简单的python读写文件脚本
Nov 25 Python
详解Python 正则表达式模块
Nov 05 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
python简单实现AES加密和解密
Mar 28 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
M1芯片安装python3.9.1的实现
Feb 02 Python
只用Python就可以制作的简单词云
Jun 07 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
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
jQuery each函数源码分析
2016/05/25 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
node.js中axios使用心得总结
2017/11/29 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
[04:54]DOTA2 2017国际邀请赛:上届冠军WINGS采访短片
2017/08/09 DOTA
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python多进程原理与用法分析
2018/08/21 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
什么是网络协议
2016/04/07 面试题
法学专业个人求职信
2013/09/26 职场文书
大学生优秀的自我评价分享
2013/10/22 职场文书
感恩节寄语2015
2015/03/24 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android
Python 键盘事件详解
2021/11/11 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python