flask 工廠函數(shù)

使用工廠函數(shù)不會(huì)直接創(chuàng)建 app 實(shí)例這個(gè)全局變量,而是通過(guò) create_app() 函數(shù)創(chuàng)建,再返回 app 對(duì)象。

演示一個(gè)項(xiàng)目使用工廠函數(shù)的例子,用上 flask_sqlalchemy,flask_migrate,flask_bootstrap 等擴(kuò)展庫(kù)。

文檔結(jié)構(gòu):

/app
    __init__.py
    models.py
    routes.py
config.py
run.py
# __init__.py

from flask import Flask
from config import Config

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_bootstrap import Bootstrap


db = SQLAlchemy()
migrate = Migrate()
bootstrap = Bootstrap()

def create_app():
    app = Flask(__name__)
    # 加載配置文件
    app.config.from_object(Config)

    # 初始化各種擴(kuò)展庫(kù)
    db.init_app(app)
    migrate.init_app(app, db)
    bootstrap.init_app(app)

    # 引入藍(lán)圖并注冊(cè)
    from app.routes import main_routes
    app.register_blueprint(main_routes)

    return app

from app import models

調(diào)用工廠函數(shù)創(chuàng)建 app。

# run.py

from app import create_app, db
app = create_app()

因?yàn)椴淮嬖谌肿兞?app 了,所以 routes 里面的路由函數(shù)也不能直接注冊(cè)成 @app.route('/') 這種形式,應(yīng)當(dāng)使用藍(lán)圖(Blueprint)來(lái)管理路由。

# routers.py

main_routes = Blueprint('main', __name__)

@main_routes .route('/index')
def index():
    …………

本文源碼:https://github.com/SingleDiego/Flask-Application-Factories

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容