Mas*_*oda 5 python api rest middleware fastapi
当我尝试运行 FastApi api 时,出现此错误。
app = cls(app=app, **options) TypeError: 'module' 对象不可调用
我正在尝试在与 main.py 分开的其他文件夹中添加中间件,但不知道为什么不起作用。否则,当我将中间件代码添加到 main.py 中时,工作不会出现问题。这是我的代码,感谢您的帮助,请原谅我的英语。
主要.py
from fastapi import FastAPI
from fastapi import Depends, FastAPI, HTTPException
from fastapi import Request
from routers import rutas
from utils import CheckApiKey
from utils.CheckApiKey import check_api_key
app = FastAPI()
app.add_middleware(CheckApiKey, dispatch=check_api_key) <--- Here calling middleware
app.include_router(rutas.router)
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
Run Code Online (Sandbox Code Playgroud)
中间件
from fastapi import Request
async def check_api_key(request: Request, call_next):
print("ok")
response = await call_next(request)
return response
Run Code Online (Sandbox Code Playgroud)
我找到了解决方案...我必须创建一个继承自 starlette basehttpmiddleare 的类,如下所示。
from starlette.middleware.base import BaseHTTPMiddleware
class CheckApiKey(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
print("ok")
response = await call_next(request)
return response
Run Code Online (Sandbox Code Playgroud)