15_Flask集成WSGI中间件

一、视频教程

15_Flask集成WSGI中间件

通过本节课程的学习,你将学会通过WSGI中间件来增强日志记录功能,使用 app.wsgi_app 来包装中间件,并保持 app 指向原始的Flask应用,达到降低代码耦合度、增强代码可维护性和扩展性。《Flask快速入门教程》,人人都能学,小白看得懂学得会,跟我学编程,免费领取配套学习资料。

二、WSGI 是什么

WSGI(Web Server Gateway Interface)是一种用于Python Web应用程序的标准接口,它定义了服务器如何与应用程序或框架进行通信。通过使用WSGI中间件,你可以在请求到达Flask应用之前和响应返回客户端之前对它们进行处理。

三、WSGI中间件应用场景

3.1 日志记录

记录每个请求和响应的详细信息。

3.2 身份验证

在请求到达应用之前进行身份验证。

3.3 性能监控

测量请求处理时间。

3.4 错误处理

捕获并处理异常。

3.5 重写路由

修改请求路径或其他头信息。

四、WSGI中间件集成

下面使用一个简单的Flask应用,并通过WSGI中间件来增强日志记录功能。我们将使用 app.wsgi_app 来包装中间件,并保持 app 指向原始的Flask应用,达到降低代码耦合度、增强代码可维护性和扩展性。

4.1 初始代码

Ctrl + C 拷贝 02-start-params,粘贴到 flask-study 目录,然后命名为 12-wsgi-middleware

0

3.2 日志中间件

LoggingMiddleware 类:

import timefrom werkzeug.wrappers import Requestclass LoggingMiddleware:    # __init__ 方法初始化中间件,接收一个 app 参数    def __init__(self, app):        self.app = app    # __call__ 方法是可调用对象的核心,当请求到达时会被调用。    # environ:传递请求数据    # start_response:回调函数    def __call__(self, environ, start_response):        # 记录请求开始时间        start_time = time.time()        # 使用 Werkzeug 的 Request 解析请求信息        request = Request(environ)        # 在请求到达应用之前打印请求信息        print(f"Request received: {request.method} {request.url}")        # 定义 custom_start_response 函数,在响应返回客户端之前计算并打印响应的状态码和处理时间        # status:获取响应的状态码和状态信息        # headers:获取响应的所有头信息        # exc_info:如果存在异常信息,则将其传递给原始的 start_response 函数        def custom_start_response(status, headers, exc_info=None):            # 记录请求结束时间            end_time = time.time()            # 处理时间            duration = end_time - start_time            # 打印响应状态码和处理时间(单位为秒并且保留四位小数)            print(f"Response status: {status}, Duration: {duration:.4f}s")            # 调用原始的 start_response 函数            return start_response(status, headers, exc_info)
        # 调用原始的应用,并传递 environ 和 custom_start_response        return self.app(environ, custom_start_response)

4.3 将日志中间件应用到Flask应用上

# 使用 app.wsgi_app 包装中间件 app.wsgi_app = LoggingMiddleware(app.wsgi_app)

4.4 测试效果

每次访问Flask应用时,都会先经过中间件的处理,记录请求和响应的相关信息。同时,app 仍然指向原始的Flask应用,我们可以继续直接使用和配置它。

启动应用服务:

0

访问:http://127.0.0.1:5000/

0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾飞开源

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值