flask接口动态注册--依赖于蓝图
# 实现代码
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
│ │
flask接口动态注册--依赖于蓝图的更多相关文章
- SpringBoot27 JDK动态代理详解、获取指定的类类型、动态注册Bean、接口调用框架
1 JDK动态代理详解 静态代理.JDK动态代理.Cglib动态代理的简单实现方式和区别请参见我的另外一篇博文. 1.1 JDK代理的基本步骤 >通过实现InvocationHandler接口来 ...
- Servlet - Upload、Download、Async、动态注册
Servlet 标签 : Java与Web Upload-上传 随着3.0版本的发布,文件上传终于成为Servlet规范的一项内置特性,不再依赖于像Commons FileUpload之类组件,因此在 ...
- 03 flask数据库操作、flask-session、蓝图
ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库数据的映射. 1.优点 : 只需要面向对象编程, 不需要面向数据库编写代码. ...
- Spring之2:Spring Bean动态注册、删除
IoC容器的初始化包括BeanDefinition的Resource定位.载入和注册这三个基本的过程. 一.Resource定位.BeanDefinition的资源定位有resourceLoader通 ...
- RPC原来就是Socket——RPC框架到dubbo的服务动态注册,服务路由,负载均衡演化
序:RPC就是使用socket告诉服务端我要调你的哪一个类的哪一个方法然后获得处理的结果.服务注册和路由就是借助第三方存储介质存储服务信息让服务消费者调用.然我们自己动手从0开始写一个rpc功能以及实 ...
- Android(java)学习笔记173:BroadcastReceiver之 静态注册 和 动态注册
1. 广播接受者>什么是广播.收音机.电台:对外发送信号.收音机:接收电台的信号. >在android系统里面,系统有很多重要的事件: 电池电量低,插入充电器,sd卡被移除,有电话打出去, ...
- 插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903 前言:为什么要了解系统Activity,Service,BroadCas ...
- JNI动态注册native方法及JNI数据使用
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...
- 动态注册broadcast的安全考虑
一.android service通知activity更新方式有1. service 通过广播的形式发送broadcast,向这个activity的内部类发广播的消息来更新界面2. service直接 ...
- Mybatis学习系列(四)Mapper接口动态代理
实现原理及规范 Mapper接口动态代理的方式需要手动编写Mapper接口,Mybatis框架将根据接口定义创建接口的动态代理对象,代理对象的方法体实现Mapper接口中定义的方法. 使用Mapper ...
随机推荐
- python+requests 验证码登录
1.先创建一个session req = requests.session() 2.通过session来把验证码下载到本地, code = req.get("https://passport ...
- mysql8.0修改密码
把密码设置为空:UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost'; 查看USE ...
- Taro 弹窗阻止小程序滑动穿透(亲测有效) tabbar数据缓存不更新 入口场景值不同
v3.0 推出后反馈最多的问题之一,就是在 touchmove 事件回调中调用 e.stopPropagation() 并不能阻止滑动穿透. 这是因为 Taro 3 的事件冒泡机制是单独在小程序逻辑层 ...
- spring的作用
Spring能有效地组织你的中间层对象,无论你是否选择使用了EJB.如果你仅仅使用了Struts或其他的包含了J2EE特有API的framework,你会发现Spring关注了遗留下的问题.Sprin ...
- vue接口
前端的接口与后端进行对接,根据后台的接口字段与前端的字段对应 这是前端的定义方法,下面是一个方法定义的默认值下标 接下来就是提交的方法里面进行对接,再将ruleForm重新定义,然后进入接口进行存储 ...
- Ubuntu系统运行Steam中VR游戏的相关软件环境配置说明
ubuntu下的SteamVR(HTCVive)设置教程 贴吧链接 https://tieba.baidu.com/p/5333529880 运行SteamVR出现的一些问题解决方案参考链接 ...
- 4、Redis底层原理(持久化+分布式锁)
Redis底层原理 持久化 Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即 ...
- 26、EXCEL—插入的文字,如何修改其内的边间距
在形状格式-文本选项里面设置文本框的间距
- Sharp7与S7NetPlus 性能测试
介绍 Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...
- HTTP协议中的长连接和短链接
一.概念 HTTP长连接,也称持久连接,是使用同一个TCP连接来发送和接受多个HTTP请求/应答,而不是位每一个新的请求/应答打开新的TCP连接.这种方式由于通信连接一直存在,此种方式常用于P2P通信 ...