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实现服务器中只重载被修改的进程的方法
Apr 30 Python
Python随机生成带特殊字符的密码
Mar 02 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
python基于opencv检测程序运行效率
Dec 28 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
在TensorFlow中实现矩阵维度扩展
May 22 Python
Python celery原理及运行流程解析
Jun 13 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
什么是Python包的循环导入
Sep 08 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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
YII实现分页的方法
2014/07/09 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php表单敏感字符过滤类
2014/12/08 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
jquery 图片轮换效果
2010/07/29 Javascript
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
node.js express框架简介与实现
2019/07/23 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python正则表达式的使用范例详解
2014/08/08 Python
Python pandas常用函数详解
2018/02/07 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
python之super的使用小结
2018/08/13 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
Python进度条的制作代码实例
2019/08/31 Python
想学画画?python满足你!
2020/12/24 Python
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
护理专业本科生自荐信
2013/10/01 职场文书
金融专业毕业生推荐信
2013/11/26 职场文书
电焊工岗位职责
2014/03/06 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
工程部岗位职责
2015/02/10 职场文书