Python Flask请求扩展与中间件相关知识总结


Posted in Python onJune 11, 2021

一、请求扩展

1.before_request

作用: 类比django中间件中的process_request,在请求到来执行路由函数之前先执行. 但是如果有多个顺序是从上往下执行.

应用: 基于它做用户登录认证

注意: 如果before_request的返回值不是None的清空下, 返回的而是别的值, 那么后续的请求都不会执行,本次请求直接返回, 如果定义了after_request那么会接着它执行, 最终本次请求响应结束.

@app.before_request
def process_request(*args,**kwargs):
    if request.path == '/login':
        return None
    user = session.get('user_info')
    if user:
        return None
    return redirect('/login')

2.after_request

作用: 类比django中间件中的process_response,如果请求没有出现异常的情况下, 会在请求返回return之前执行. 但是如果有多个顺序是从下往上执行.

@app.after_request  # 后执行
def process_response1(response):
    print('process_response1 走了')
    return response

@app.after_request  # 先执行
def process_response2(response):
    print('process_response2 走了')
    return response

3.before_first_request

作用: 项目启动起来接收到第一次请求时执行.

应用: 项目初始化用来保证以后项目只要不重启就不再继续执行.

@app.before_first_request
def first():
    print('我的第一次')

4. teardown_request

作用: 在每一个路由函数执行完毕之后执行,即使遇到了异常也会执行. (提示: 返回reutrn没有任何的效果, 不能控制返回的结果)

应用: 记录日志

@app.teardown_request  
def ter(e):  # e就是上一个路由函授执行过程中出现被捕获的异常信息.
    print(e)
    print('我是teardown_request ')

5.errorhandler

作用: 绑定错误的状态码进而可以捕获服务器的错误, 并返回对应的错误页面.

@app.errorhandler(500)
def error_500(arg):
    return render_template('error.html', message='500错误')


@app.errorhandler(404)
def error_404(arg):
    return render_template('error.html', message='404错误')

6.template_global

作用: 全局的标签, 在任意的html页面中就可以直接使用, 不需要在render_template中传递参数以后才能使用.

@app.template_global()
def sb(a1, a2):
    return a1 + a2

# html页面中直接使用, 不需要传递参数.
{{ sb(1,2) }}

7.template_filter

@app.template_filter()
def db(a1, a2, a3):
    return a1 + a2 + a3

# html页面中直接使用, 不需要传递参数. 其中1传递给a1, 2传递给a2, 3传递给a3. (提示: Django中的过滤器最多只可以传递二个参数)
{{ 1|db(2,3) }}

总结:

1.重点掌握before_requestafter_request

2.注意有多个的情况,执行顺序

3.before_request请求拦截后(也就是有return值),response所有都执行

二、中间件

class Md(object):
    def __init__(self, old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app

    def __call__(self, environ, start_response):
        print('开始之前')
        ret = self.old_wsgi_app(environ, start_response)
        print('结束之后')
        return ret


if __name__ == '__main__':
    # 1. 我们发现当执行app.run方法的时候,最终执行run_simple,最后执行app(),也就是在执行app.__call__方法
    # 2. 在__call__里面,执行的是self.wsgi_app().那我们希望在执行他本身的wsgi之前做点事情。
    # 3. 所以我们先用Md类中__init__,保存之前的wsgi,然后我们用将app.wsgi转化成Md的对象。
    # 4. 那执行新的的app.wsgi_app,就是执行Md的__call__方法。
    # 5. 最后把原来的wsgi_app替换为自定义的

    app.wsgi_app = Md(app.wsgi_app)
    app.run()

到此这篇关于Python Flask请求扩展与中间件相关知识总结的文章就介绍到这了,更多相关Flask请求扩展与中间件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
python使用Flask操作mysql实现登录功能
May 14 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
python实现随机梯度下降法
Mar 24 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python实现括号匹配方法详解
Feb 10 Python
Django实现前台上传并显示图片功能
May 29 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 Python
你喜欢篮球吗?Python实现篮球游戏
教你使用TensorFlow2识别验证码
Jun 11 #Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Python3中PyQt5简单实现文件打开及保存
Jun 10 #Python
Python selenium的这三种等待方式一定要会!
python实现股票历史数据可视化分析案例
Python如何识别银行卡卡号?
You might like
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
js函数般调用正则
2008/04/08 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
JS中的数组转变成JSON格式字符串的方法
2017/05/09 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
详细探究Python中的字典容器
2015/04/14 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
2018/04/27 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
对Python信号处理模块signal详解
2019/01/09 Python
Python字典对象实现原理详解
2019/07/01 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
项目申请汇报材料
2014/08/16 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
KTV员工管理制度
2015/08/06 职场文书