当前位置: 首页 > 行业

利用PythonFlask蓝图加自定义蓝图划分优雅的目录结构 聚看点

来源:虎均IFELSE 发布时间:2023-03-13 05:05:18 分享至:


(相关资料图)

我们在用Flask开发网站的时候。经常看到有很多人把所有的路由函数放到了入口文件,这种做法是非常不可取的,如果我们的视图函数有几百个了都写到一个文件里肯定是不行的。还有在实现中我们都在比较大型项目里面我们可能有十几个甚至几十个这种不同模型。我们需要考虑把这些模型分文别类归属到不同的文件中去。而不是都集中在同一个文件中。如下图这种:是不是很乱,那么我们怎么拆分这些函数了。接下来我们就来简单实现一下:

一、 规划目录结构

二、新建app包构造核心目录

api/v1/init.py 接口目录为版本号模块初始化文件api/v1/user.py 接口目录为版本号加上模块名称文件config/settings.py 包为配置文件lib/redprint.py核心类文件模仿蓝图重写app.py 核心入口文件当然还有其他包比如model为数据库validate为验证等等就不在列举

api/v1/init.py 用蓝图托管版本号导入不同模块from flask import Blueprintfrom app.api.v1 import user, websitedef create_blueprint_v1():bp_v1 = Blueprint("v1", __name__)user.api.register(bp_v1)website.api.register(bp_v1)return bp_v1api/v1/user.py 用lib下自定义redprint托管模块from app.lib.redprint import Redprintapi = Redprint("user")@api.route("/get")def get_user():return "get"@api.route("/create")def create_user():return "create"settings.py 一些数据库等配置信息TOKEN_EXPIRATION = 30 * 24 * 3600SQLALCHEMY_DATABASE_URI = \"mysql+cymysql://root:123456@localhost/test"SECRET_KEY = "test"redprint.py模仿蓝图重写register和route方法class Redprint(object):def __init__(self, name):self.name = nameself.mound = []def route(self, rule, **options):def decorator(f):self.mound.append((f, rule, options))return freturn decoratordef register(self, bp, url_prefix=None):if url_prefix is None:url_prefix = "/" + self.namefor f, rule, options in self.mound:endpoint = options.pop("endpoint", f.__name__)bp.add_url_rule(url_prefix + rule, endpoint, f, **options)app.py 核心入口文件from flask import Flaskdef register_blueprints(app):from app.api.v1 import create_blueprint_v1app.register_blueprint(create_blueprint_v1(), url_prefix="/v1")def create_app():app = Flask(__name__)app.config.from_object("app.config.settings")register_blueprints(app)return app

三、main.py入口文件

from app.app import create_appapp = create_app()if __name__ == "__main__":app.run(debug=True, host="0.0.0.0", port=5001)

测试看一下效果:

关键词:

Copyright   2015-2022 太平洋礼仪网 版权所有  备案号:豫ICP备2022016495号-17   联系邮箱:93 96 74 66 9@qq.com