导航

flask接口动态注册--依赖于蓝图

Posted on 2022-06-20 19:17  old_dog~  阅读(213)  评论(0)    收藏  举报
# 实现代码 
blueprint_d = dict()

dirs = os.listdir(base_dir)  # 获取apps路径下所有文件夹列表

for d in dirs:
    ## 1、遍历模块文件夹
    file_path = os.path.join(base_dir, d)  # apps/每个模块 
    ## 2、遍历模块下面的*views.py
    for cur_path, sub_dirs, file_names in os.walk(file_path):
        for file_name in file_names:
            if file_name.endswith("views.py"):  # apps/模块/views.py
                ## 3、导入每个模块的views
                view_model = importlib.import_module(model_path)  # model_path= "apps.模块名称.views" 
                ## 4、获取模块的蓝图对象,记录
                for at in dir(view_model):  # 枚举当前模块的所有对象(函数、全局变量、类对象)
                    if at.endswith('_blueprint'):
                        blueprint_object = getattr(view_model, at)  # 从模块读取蓝图对象
                        blueprint_d[blueprint_object] = cur_path.replace("\\", "/")  # blueprint_d[蓝图对象] = 蓝图的api前缀

for blueprint in load_project_blueprint()## 5、注册蓝图 
web_app.register_blueprint(blueprint, url_prefix=flask_blueprint_dicts[blueprint]) # 蓝图注册,是蓝图对象


###### 文件结构 #####
# 目录结构
│  app.py  # 程序入口
│  manage.py
│  __init__.py
│
├─api_utils  # 杂项
│
├─apps  # web接口源码
│  │  __init__.py
│  │
│  ├─external # 如下
│  │      information_views.py
│  │      __init__.py
│  │
│  ├─family  # 模块名称
│  │  │  data_process.py
│  │  │  main.py
│  │  │  model.py
│  │  │  views.py  # 视图函数
│  │  │  __init__.py
│  │  │
│  │  └─__pycache__
│  │          views.cpython-37.pyc
│  │          __init__.cpython-37.pyc
│  │