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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
在django模板中实现超链接配置
Aug 21 Python
python绘制规则网络图形实例
Dec 09 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
Python发送手机动态验证码代码实例
Feb 28 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
python处理写入数据代码讲解
Oct 22 Python
python脚本定时发送邮件
Dec 22 Python
Matplotlib绘制混淆矩阵的实现
May 27 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
各种战术和打法的原创者
2020/03/04 星际争霸
php函数传值的引用传递注意事项分析
2016/06/25 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
Vue Socket.io源码解读
2018/02/07 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
一篇文章,教你学会Vue CLI 插件开发
2019/04/17 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
使用Python下载Bing图片(代码)
2013/11/07 Python
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python编程之string相关操作实例详解
2017/07/22 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python检查ping终端的方法
2019/01/26 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
申请任职学生会干部自荐书范文
2014/02/13 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
旅游项目合作意向书
2015/05/08 职场文书
会议主持人开场白台词
2015/05/28 职场文书
摩登时代观后感
2015/06/03 职场文书
公司人力资源管理制度
2015/08/05 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL