项目中新增加一个模块,需要把router进行注册,注册之后,接口才能被请求到。每次注册挺麻烦的,想了一个办法,每个模块的文件结构一致,接口统一放在一个文件名相同的文件里,然后用glob去匹配文件夹下的文件,实现自动注册router。
routers.py
import importlib
import os
import glob
import inspect
from fastapi.routing import APIRouter
pattern = os.path.join(os.path.dirname(__file__), "xxx", "*", "xxxxx.py")
files = glob.glob(pattern)
def register_routers(app):
routers = []
for file_path in files:
relative_path = os.path.relpath(file_path, os.path.dirname(__file__))
module_path = relative_path[:-3].replace(os.path.sep, '.')
full_model_path = f"xxxx.{module_path}"
import_module = importlib.import_module(full_model_path)
module = inspect.getmodule(import_module)
members = inspect.getmembers(module)
for member_name, member in members:
if isinstance(member, APIRouter):
routers.append(member)
for router in routers:
app.include_router(router)
文件结构:
├─dir1
│ ├─subdir1
│ │ ├─models.py
│ │ └─views.py
│ └─subdir2
│ │ ├─models.py
│ │ └─views.py
│ └─subdir3
│ │ ├─models.py
│ │ └─views.py
2763

被折叠的 条评论
为什么被折叠?



