在使用FastAPI框架进行web api的开发时,如果要加载一些全局的数据、配置、模块等内容时,应该放在哪里。有些程序会在最后执行的方法里通过depends来加载。如下方法中在get_page里面调用Depends的时候去初始化,但这并不是一个好的方法,因为它不够靠前,并且需要在所有的方法里都加上这个方法(有些地方并不需要user数据)。本文地址:http://www.04007.cn/article/1211.html,未经许可,不得转载.
def get_page( user: User = Depends(UserCheck) ):本文地址:http://www.04007.cn/article/1211.html,未经许可,不得转载.
我建议的位置包括数据库的连接初始化位置以及全局数据、配置的加载处理位置。在app进行创建的时候,可以给app添加一些事件。包括app在start和shutdown的时候的事件。在app.on_event("startup")时执行数据库连接。本文地址:http://www.04007.cn/article/1211.html,未经许可,不得转载.
def register_app_event(app: FastAPI): @app.on_event("startup") async def startup_event(): Platform.init_mysql(MYSQL_CONFIG)本文地址:http://www.04007.cn/article/1211.html,未经许可,不得转载.
使用@app.middleware("http")注册一些http中间件事件,在请求的执行前做处理,以及在请求的执行后做处理,这样可以做到AOP面向切面编程。如下在http中间件处理中就可以先做一些初始化和全局数据配置的加载,然后再进行await set_body(request)继续执行请求,并可以在请求结束后统一记录请求的执行时间、响应数据等。本文地址:http://www.04007.cn/article/1211.html,未经许可,不得转载.
def register_middleware(app: FastAPI): @app.middleware("http") async def logger_request(request: Request, call_next): # 完成调用一些请求的初始化后再执行await set_body(request) Platform.init() await set_body(request)
本文地址:http://www.04007.cn/article/1211.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |