python框架之Flask(3)-Blueprint(蓝图)

蓝图

用途

给开发者提供清晰的目录结构。

使用

  • 目录结构

    1、创建项目。

    2、在项目目录下创建与项目名同名文件夹。

    3、在 test_prj 文件夹下创建 __init__.py 文件,并在其中实例化 Flask 并返回。

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

    3、在项目目录下创建 manage.py 文件作为入口,导入 Flask 实例并使用

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

    4、在项目同名文件夹下创建 views 文件夹用来存放视图文件。

  • 引入蓝图

    5、在 views 文件夹下编写视图相关代码。比如新建一个用户逻辑相关视图,并引入蓝图。

    # 引入蓝图
    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

    6、在 /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

    7、接下来就可以正常运行访问了。

  • 模板使用

    8、在项目同名文件夹下创建 templates 目录。

    9、在 templates 目录下新建登录模板,修改视图。

    <!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
posted @ 2018-11-08 13:37  zze  阅读(544)  评论(0编辑  收藏  举报