永久免费看啪啪网址入口_国产精品自产拍在线观看免费_无码99久任我爽精品视频_国语经典毛片黄片_国产精品福利片

當(dāng)前位置: 首頁 > 行業(yè)

利用PythonFlask藍(lán)圖加自定義藍(lán)圖劃分優(yōu)雅的目錄結(jié)構(gòu) 聚看點

來源:虎均IFELSE 發(fā)布時間:2023-03-13 05:05:18 分享至:


(相關(guān)資料圖)

我們在用Flask開發(fā)網(wǎng)站的時候。經(jīng)常看到有很多人把所有的路由函數(shù)放到了入口文件,這種做法是非常不可取的,如果我們的視圖函數(shù)有幾百個了都寫到一個文件里肯定是不行的。還有在實現(xiàn)中我們都在比較大型項目里面我們可能有十幾個甚至幾十個這種不同模型。我們需要考慮把這些模型分文別類歸屬到不同的文件中去。而不是都集中在同一個文件中。如下圖這種:是不是很亂,那么我們怎么拆分這些函數(shù)了。接下來我們就來簡單實現(xiàn)一下:

一、 規(guī)劃目錄結(jié)構(gòu)

二、新建app包構(gòu)造核心目錄

api/v1/init.py 接口目錄為版本號模塊初始化文件api/v1/user.py 接口目錄為版本號加上模塊名稱文件config/settings.py 包為配置文件lib/redprint.py核心類文件模仿藍(lán)圖重寫app.py 核心入口文件當(dāng)然還有其他包比如model為數(shù)據(jù)庫validate為驗證等等就不在列舉

api/v1/init.py 用藍(lán)圖托管版本號導(dǎo)入不同模塊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 一些數(shù)據(jù)庫等配置信息TOKEN_EXPIRATION = 30 * 24 * 3600SQLALCHEMY_DATABASE_URI = \"mysql+cymysql://root:123456@localhost/test"SECRET_KEY = "test"redprint.py模仿藍(lán)圖重寫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)

測試看一下效果:

關(guān)鍵詞:

Copyright   2015-2022 太平洋禮儀網(wǎng) 版權(quán)所有  備案號:豫ICP備2022016495號-17   聯(lián)系郵箱:93 96 74 66 9@qq.com