跳轉至

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