Flask-蓝图(blueprint)

1 没有蓝图之前前,都是单文件
2 有了蓝图可以分文件,分app,之前的请求扩展还是一样用,只是在当前蓝图对象管理下的有效
3 蓝图使用

#第一步在app中注册蓝图,括号里是一个蓝图对象
app.register_blueprint(user.us)
# 第二步,在不同文件中注册路由时,直接使用蓝图对象注册,不用使用app了,避免了循环导入的问题
@account.route('/login.html', methods=['GET', "POST"])

使用示例:

目录

 pro_flask/app.py

from pro_flask import create_app

app = create_app()

if __name__ == '__main__':
    app.run()
pro_flask/app.py

pro_flask/pro_flask/__init__.py

from flask import Flask



def create_app():
    app = Flask(__name__)
    app.secret_key = 'aksdsjfdkjfskdjfk'

    @app.route('/index')
    def index():
        return 'index'
    # 导入蓝图对象
    from .views.account import xaccount
    from .views.user import xus

    # 在app中注册蓝图,括号里是一个蓝图对象
    app.register_blueprint(xaccount)
    app.register_blueprint(xus)
    # 如果访问的资源不是/index,则去xus和xaccount这俩蓝图里找,例如:http://127.0.0.1:5000/f1
    """
    # 在app中注册蓝图时,还可以带上url_prefix参数,相当于django的路由分发,则访问蓝图资源时必须带上对应前缀
    app.register_blueprint(xaccount, url_prefix='/web')
    app.register_blueprint(xus, url_prefix='/admin')
    
    访问示例:
    http://127.0.0.1:5000/admin/f1
    """

    return app
pro_flask/pro_flask/__init__.py

pro_flask/pro_flask/views/account.py

from flask import Blueprint

xaccount = Blueprint('xaccount', __name__)  # 第一个参数是起的名字


@xaccount.route('/xaccf1')
def f1():
    return 'xaccf1'


@xaccount.route('/xaccf1')
def f2():
    return 'xaccf2'
account.py

pro_flask/pro_flask/views/user.py

from flask import Blueprint

xus = Blueprint('xus', __name__)  # 第一个参数是起的名字


@xus.route('/f1')
def f1():
    return 'f1'


@xus.route('/f2')
def f2():
    return 'f2'
user.py

备注:

上述account和user蓝图中在初始时可以定制使用自己的静态文件和模板文件目录

xaccount = Blueprint('xaccount', __name__, )

###########
    def __init__(
        self,
        name: str,
        import_name: str,
        static_folder: t.Optional[t.Union[str, os.PathLike]] = None,
        static_url_path: t.Optional[str] = None,
        template_folder: t.Optional[str] = None,
        url_prefix: t.Optional[str] = None,
        subdomain: t.Optional[str] = None,
        url_defaults: t.Optional[dict] = None,
        root_path: t.Optional[str] = None,
        cli_group: t.Optional[str] = _sentinel,  # type: ignore
    ):
        super().__init__(
            import_name=import_name,
            static_folder=static_folder,
            static_url_path=static_url_path,
            template_folder=template_folder,
            root_path=root_path,
        )

4 中小型项目目录划分

项目名字
    -pro_flask文件夹
    -__init__.py
    -templates
        -login.html
    -statics
        -code.png
    -views
        -blog.py
        -account.py
        -user.py
    -run.py

5 大型项目

项目名
    -pro_flask文件夹
        -__init__.py
        -web
            -__init__.py
            -static
            -views.py
            -templates
        -admin
            -templates
            -static
            -views.py
            -__init__.py
    -run.py

 

posted @ 2022-07-06 22:04  耗油炒白菜  阅读(250)  评论(1编辑  收藏  举报