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 28 Python
python smtplib模块实现发送邮件带附件sendmail
May 22 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
python生成器推导式用法简单示例
Oct 08 Python
Python3安装pip工具的详细步骤
Oct 14 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
基于python实现坦克大战游戏
Oct 27 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 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
cmd下运行php脚本
2008/11/25 PHP
关于页面优化和伪静态
2009/10/11 PHP
php自动加载autoload机制示例分享
2014/02/20 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
Js动态创建div
2008/09/25 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
JQuery UI皮肤定制
2009/07/27 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
javascript控制台详解
2015/06/25 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python 连接sqlite及简单操作
2017/06/30 Python
python邮件发送smtplib使用详解
2020/06/16 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
Python实现图片识别加翻译功能
2019/12/26 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
如何理解委托
2012/01/06 面试题
上班早退检讨书
2014/01/09 职场文书
校园创业策划书
2014/01/14 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
公证委托书模板
2014/04/03 职场文书