FastAPI系列:中间件
中间件介绍
中间件是一个函数,它在每个请求被特定的路径操作处理之前 ,以及在每个响应返回之前工作
装饰器版中间件
1.必须使用装饰器@app.middleware("http"),且middleware_type必须为http
2.中间件参数:request, call_next,且call_next
它将接收 request
作为参数
自定义中间件BaseHTTPMiddleware
BaseHTTPMiddleware是一个抽象类,允许您针对请求/响应接口编写ASGI中间件
要使用 实现中间件类BaseHTTPMiddleware
,您必须重写该 async def dispatch(request, call_next)
方法,
如果您想为中间件类提供配置选项,您应该重写该__init__
方法,确保第一个参数是app
,并且任何剩余参数都是可选关键字参数。app
如果执行此操作,请确保在实例上设置该属性。
ip白名单中间件(基于纯ASGI中间)
根据官网说明BaseHTTPMiddleware有一些已知的局限性:
使用BaseHTTPMiddleware
将阻止对contextlib.ContextVar
的更改向上传播。
也就是说,如果您ContextVar
在端点中设置 a 值并尝试从中间件读取它,您会发现该值与您在端点中设置的值不同
纯ASGI中间件,使用类的方式
上面的中间件是最基本的ASGI中间件。它接收父 ASGI 应用程序作为其构造函数的参数,并实现async __call__
调用该父应用程序的方法。
无论如何,ASGI 中间件必须是接受三个参数的可调用对象:scope
、receive
和send
- scope是一个保存有关连接信息的字典,其中scope["type"]可能是:
"http"
:用于 HTTP 请求。"websocket"
:用于 WebSocket 连接。"lifespan"
:用于 ASGI 生命周期消息。
receive
和send
可以用来与ASGI服务器交换ASGI事件消息。这些消息的类型和内容取决于作用域类型。在ASGI规范中了解更多信息
跨域中间件cors
同源:协议,域,端口相同
__EOF__

本文链接:https://www.cnblogs.com/weiweivip666/p/18041311.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-02-28 方法指针或非指针类型接收器