Unfazed 中间件
中间件是网络框架中的重要组成部分,用于处理请求和响应。Unfazed 继承了 starlette 的中间件调用设计,提供
- 全局中间件
- 路由中间件
快速开始
unfazed 中间件仅提供一种编写方式。
from unfazed.middleware import BaseMiddleware
class MyMiddleware(BaseMiddleware):
async def __call__(self, scope, receive, send):
# do something before request
async def send_wrapper(message):
# do something before response
await send(message)
await self.app(scope, receive, send_wrapper)
将其作为全局中间件
# settings.py
UNFAZED_SETTINGS = {
"MIDDLEWARE": [
"app.middleware.MyMiddleware"
]
}
将其作为路由中间件
# routes.py
from unfazed.route import path
patterns = [
path("/api", endpoint=api, middleware=["app.middleware.MyMiddleware"])
]
中间件所需要的配置全部通过 settings
传递,这样可以方便进行管理。
from unfazed.middleware import BaseMiddleware
from unfazed.conf import settings
class MyMiddleware(BaseMiddleware):
def __init__(self):
super().__init__()
config = settings["APP_SETTINGS"]
self.foo = config.FOO
async def __call__(self, scope, receive, send):
print(self.foo)
# do something before request
async def send_wrapper(message):
# do something before response
await send(message)
await self.app(scope, receive, send_wrapper)
内置中间件
Unfazed 内置了一些中间件,用于处理请求和响应。
CommonMiddleware
引入方式: "unfazed.middleware.internal.common.CommonMiddleware"
功能待扩展,当前提供对于报错的处理,当 DEBUG 为 True 时,返回详细的错误页面,为 False 时,返回 Internal Server Error。
CORSMiddleware
引入方式: "unfazed.middleware.internal.cors.CORSMiddleware"
跨域请求处理中间件,继承 starlette.corsmiddleware。
GZipMiddleware
引入方式: "unfazed.middleware.internal.gzip.GZipMiddleware"
gzip 压缩中间件,继承 starlette.gzipmiddleware
TrustedHostMiddleware
引入方式: "unfazed.middleware.internal.trustedhost.TrustedHostMiddleware"
TrustedHostMiddleware 用于检查请求的 host 是否在 ALLOWED_HOSTS 中,如果不在,则返回 400 错误,继承 starlette.TrustedHostMiddleware。
SessionMiddleware
引入方式: "unfazed.contrib.session.middleware.SessionMiddleware"
SessionMiddleware 用于处理 session,当前支持 siging 和 redis 两种 engine。配置信息可见 session settings