Flask框架各种常见装饰器示例
作者:铠甲巨人 发布时间:2023-08-25 01:07:45
标签:Flask框架,装饰器
本文实例讲述了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_request
和app.after_request
,
那么执行顺序也和django类似,
app.before_request
是按照从上而下执行(文件的上下),app.after_request
是自下而上执行。
如果在app.before_request
中return
了其他内容,请求被拦截,那么不会执行视图函数,
直接从最后一个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的中间件一般感觉用处不大,不如装饰器方便
通过重新复制app.wsgi_app
,
重写这个类的__call__
方法,如上图,只是增加了两个打印,效果同process_request
,process_response
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/ArmoredTitan/p/8878124.html
0
投稿
猜你喜欢
- 代码编辑环境Win10+(Pycharmm or Vscode)+PyQt 5.14.2功能实现静态作图:数据作图,取决于作图函数,可自行修
- HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址:http://phpq
- 转发和重定向:转发:一次请求和响应,请求的地址没有发生变化,如果此时刷新页面,就会出现重做现象。重定向:一次以上的请求和响应,请求地址发生一
- 一 时间元组1. 时间元组和时间戳的互化import time,datetime# 获取当前时间的时间元组t = time.localtim
- get方法代码实现# coding:utf-8import jsonfrom urlparse import parse_qsfrom ws
- 最近因项目需要用ACCESS做数据库开发WEB项目看论坛上还许多人问及ACCESS被注入的安全问题许多人解决的方法仍然是用Replace替换
- 本文实例讲述了Python基于回溯法子集树模板解决取物搭配问题。分享给大家供大家参考,具体如下:问题有5件不同的上衣,3条不同的裤子,4顶不
- 相信很多朋友在用Python写完代码之后都迫不及待的想发给对象交流(装X),但是发源码又要求对方有对应的解释器,一般是行不通的,所以我们要把
- 页面中header部分一般位于最上端(有时根据需要也会位于某一侧,不管它在页面中的位置如何,在XHTML代码中它总是优于其它元素先加载),内
- 这里首先给出来我很早之前写的一篇博客,Python实现去除列表中重复元素的方法小结【4种方法】,感兴趣的话可以去看看,今天是在实践过程中又积
- 这篇文章主要介绍了python处理RSTP视频流过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- 作者:JavaScript Kit译者:子乌(Sheneyan)翻译日期:2006-02-12英文原文:Conditional Compil
- 如果你想让你的IIS支持wml,做个wap网站,只需作小小的改变就行了.虽然目前支持wml的虚拟主机极少,但是自己在本机上玩玩也好的.首先在
- 安装anaconda登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网点击下载跳转
- 安装 xlwings直接安装用 pip install xlwings,用 anaconda 的,已经内置了,见下图。导入 xlwingsi
- 前言上一篇文章介绍了怎么配置机器人框架,并且实现了一些简单的功能。(发送私聊或者群聊信息、接收上报的事件、简单的自动回复等等)这次为了让QQ
- 目录1、创建相关新应用2、获取Access Token3、分析评论并进行观点抽取4、运行结果利用百度API自然语言处理技术中的评论观点抽取方
- 本文将介绍使用Dreamweaver来制作滑动菜单的方法,言归正传,废话少说。准备工作如下: 1. 在dw中新建一个空白文档(或者打开你要添
- isnumeric()方法检查字符串是否仅由数字组成。这种方法只表示为Unicode对象。注意:要定义一个字符串为Unicode
- 前言快520了,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。(分了别来找我哇)。多的不说直接进入正题人人对战游戏规则:p1为黑子,p