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
相关文章
相关标签/搜索