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爬取网易云音乐上评论火爆的歌曲
Jan 19 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
matplotlib调整子图间距,调整整体空白的方法
Aug 03 Python
Python微医挂号网医生数据抓取
Jan 24 Python
python创建与遍历List二维列表的方法
Aug 16 Python
python下载库的步骤方法
Oct 12 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
Oct 23 Python
Django之form组件自动校验数据实现
Jan 14 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
python中的列表和元组区别分析
Dec 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
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
JavaScript中的类与实例实现方法
2015/01/23 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
利用打码兔和超人打码自封装的打码类分享
2014/03/16 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
解决python "No module named pip" 的问题
2018/10/13 Python
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
税务专业毕业生自荐信
2013/11/10 职场文书
三年级数学教学反思
2014/01/31 职场文书
《月迹》教学反思
2014/02/19 职场文书
倡议书格式
2014/04/14 职场文书
高一学生期末评语
2014/04/25 职场文书
工厂搬迁方案
2014/05/11 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
宣传普通话标语
2014/06/27 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
整改报告格式
2014/11/06 职场文书
长城导游词400字
2015/01/30 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
物业保洁员管理制度
2015/08/05 职场文书
初中班主任心得体会
2016/01/07 职场文书