flask为什么使用蓝图[Flask框架]

python

Flask使用蓝图的作用:专门用来对项目进行模块划分,其次可以解决循环导入问题(如@app.route("/"),分模块后都用@app,就会出现循环导入)。

比如:一个xxx网站,可能用到首页模块、用户模块、后台模块等等。

在项目开发过程中,需要把项目根据相关的功能划分为对应的模块,通过模块的划分可以更好的组织项目的目录结构,使项目的整个框架更加清晰。

蓝图引入

    我们尝试将项目中的news视图函数抽离出来作为 news.py  一个单独的模块

    main.py中:

        from flask import Flask

        from news import news

        

        app = Flask(__name__)

        @app.route("/")

        def index():

            return "index"

            

        @app.route("/users")

        def users():

            return "users"

        if __name__ == "__main__":

            app.run(debug=True)

    news.py中:

        from main import app

        @app.route("/news")

        def news():

            return "news"

以上代码运行main.py会报错,ImportError: cannot import name ‘news’,原因是循环导入问题

蓝图使用步骤:

    1、创建蓝图(在news.py中)

    from flask import Blueprint

    news_blu = Blueprint("news", __name__)

    2、使用蓝图对象注册路由(在news.py中)

    @news_blu.route("/news")

    def news():

        return "news3"

    3、使用app对象注册蓝图(在main.py中)

    from news import news_blu

    app.register_blueprint(news_blu)

目录形式的蓝图的注意点:

    我们将users模块处理成一个users包,包下面有另两个文件__init__.py,和views.py(专门用来存放这个模块的视图函数):   

    __init__.py中

    from flask import Blueprint

    users_blu = Blueprint("users", __name__)

    from . import views    # 把视图函数抽取到views.py中之后,需要在__init__.py文件中导入视图函数所在的这个view文件

    # ------------------------------------------

    views.py中:

    from . import users_blu

    # 使用蓝图注册路由

    @users_blu.route("/users")

    def users():

        return "users"

    # ------------------------------------------

    main.py 中:

    from users import users_blu

    app.register_blueprint(users_blu)

注意:from . import xxx 表示从当前文件所在的包中导入xxx模块

蓝图对象参数设置:

users_blu = Blueprint(“users”, name,

static_folder=“static”, # 蓝图中静态文件存储目录

static_url_path="/users/static", # 访问蓝图中静态文件url地址前缀

template_folder=“templates”, # 蓝图中模板文件的存储目录

# url_prefix="/users" # 统一该模块下资源请求的前缀

)

以上是 flask为什么使用蓝图[Flask框架] 的全部内容, 来源链接: utcz.com/z/523090.html

回到顶部