如何使用多个路由文件组织一个蓝图

Rob*_*rax 3 python flask

我让蓝图正常工作。

应用结构:

application.py 

users/routes.py
Run Code Online (Sandbox Code Playgroud)

在 application.py 中,我注册了蓝图:

app.register_blueprint( users, url_prefix = '/users' )
Run Code Online (Sandbox Code Playgroud)

在 users/routes.py 我创建它:

users = Blueprint( 'users', __name__, template_folder = "usersViews" )
@users.route( '/registration', methods = [ 'GET' ] )
def get_register_user_form( ):
    # Code......
Run Code Online (Sandbox Code Playgroud)

我需要做的是将其他文件添加到我需要使用 @users.route 的 users/ 中,如下所示:

users/route2.py

users/route3.py
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为蓝图仅在原始 users/routes.py 中创建。我不确定处理这种情况的正确方法?我想在每个路由文件中重新创建蓝图 users = Blueprint( 'users', name , template_folder = "usersViews" ) 不是正确的方法。那么我怎么能做到这一点呢?

abi*_*son 8

我会将其中的一些拆分成这样的__init__.py文件:

应用结构:

__init__.py (main app)
users/__init__.py (for blueprint)
users/routes.py
users/routes2.py
users/routes3.py
Run Code Online (Sandbox Code Playgroud)

然后,在主要__init__.py设置中,您的蓝图:

app = Flask(__name__)

from .users import users as user_blueprint
app.register_blueprint(user_blueprint, url_prefix='/users')

return app
Run Code Online (Sandbox Code Playgroud)

现在,在你users/__init__.py这样的事情中:

from flask import Blueprint, url_for

users = Blueprint('users', __name__)

from . import routes, routes2, routes3
Run Code Online (Sandbox Code Playgroud)

然后在users/routes.pyusers/routes2.py等:

from . import users
Run Code Online (Sandbox Code Playgroud)

警告:我从来没有真正这样做过!但这是我用于 Flask 蓝图的模式,它似乎可以解决您的问题。