python框架之Flask(3)-Blueprint(藍圖)

藍圖

用途

給開發者提供清晰的目錄結構。html

使用

  • 目錄結構

    一、建立項目。git

    二、在項目目錄下建立與項目名同名文件夾。github

    三、在 test_prj 文件夾下建立 __init__.py 文件,並在其中實例化 Flask 並返回。web

    from flask import Flask
    
    
    def create_app():
        app = Flask(__name__)
        return app
    /test_prj/__init__.py

    三、在項目目錄下建立 manage.py 文件做爲入口,導入 Flask 實例並使用flask

    from test_prj import create_app
    
    app = create_app()
    
    if __name__ == '__main__':
        app.run()
    /manage.py

    四、在項目同名文件夾下建立 views 文件夾用來存放視圖文件。app

  • 引入藍圖

    五、在 views 文件夾下編寫視圖相關代碼。好比新建一個用戶邏輯相關視圖,並引入藍圖。ide

    # 引入藍圖
    from flask import Blueprint
    
    # 實例化
    usr = Blueprint('usr', __name__)
    
    
    # 編寫視圖函數
    @usr.route('/login')
    def login():
        return 'login'
    
    
    @usr.route('/logout')
    def logout():
        return 'logout'
    /test_prj/views/user.py

    六、在 /test_prj/__init__.py 中給 Flask 實例註冊藍圖。函數

    from flask import Flask
    from .views.user import usr
    
    
    def create_app():
        app = Flask(__name__)
        app.register_blueprint(usr)
        return app
    /test.prj/__init__.py

    七、接下來就能夠正常運行訪問了。測試

  • 模板使用

    八、在項目同名文件夾下建立 templates 目錄。

    九、在 templates 目錄下新建登陸模板,修改視圖。url

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>login</title>
    </head>
    <body>
    <h2>登陸</h2>
    </body>
    </html>
    /test_prj/templates/login.html
    # 引入藍圖
    from flask import Blueprint,render_template
    
    # 實例化
    usr = Blueprint('usr', __name__)
    
    
    # 編寫視圖函數
    @usr.route('/login')
    def login():
        return render_template('login.html')
    
    
    @usr.route('/logout')
    def logout():
        return 'logout'
    /test_prj/views/user.py

補充

前綴

能夠在註冊藍圖時經過 url_prefix 屬性加上訪問該藍圖時的前綴。

app.register_blueprint(admin, url_prefix='/admin')

藍圖裝飾器

能夠讓裝飾器只對指定藍圖生效,例如:

from flask import Blueprint, render_template

usr = Blueprint('usr', __name__)


@usr.before_request
def before_request_func():
    print('from before_request_func')

指定靜態&模板目錄

from flask import Blueprint

web = Blueprint(
    'web',
    __name__,
    template_folder='templates',
    static_folder='static'
)

我測試時好像只對下面的大藍圖適用。

大藍圖

這裏說的大藍圖就是對目錄結構再更細粒度的劃分了,附上示例地址

https://github.com/zze326/flask_blueprint_pro.git
相關文章
相關標籤/搜索