Python 如何使用多视图文件的flask蓝图避免循环依赖性

Python 如何使用多视图文件的flask蓝图避免循环依赖性,python,flask,Python,Flask,我使用蓝图构建了我的应用程序,如下所示。视图文件是 非常大,所以我把它们分成了多个文件 myapp/ __初始值 管理员/ __初始值 视图1.py views2.py views3.py 视图4.py 静止的/ 模板/ 模型/ models.py myapp/init.py 从烧瓶导入烧瓶 从myapp.admin导入管理\u bp app=烧瓶(名称) 应用程序注册蓝图(管理bp) myapp/admin/\uuuuu init\uuuuuu.py 来自flask导入蓝图,g 从flas

我使用蓝图构建了我的应用程序,如下所示。视图文件是 非常大,所以我把它们分成了多个文件

myapp/
__初始值
管理员/
__初始值
视图1.py
views2.py
views3.py
视图4.py
静止的/
模板/
模型/
models.py
myapp/init.py
从烧瓶导入烧瓶
从myapp.admin导入管理\u bp
app=烧瓶(名称)
应用程序注册蓝图(管理bp)
myapp/admin/\uuuuu init\uuuuuu.py
来自flask导入蓝图,g
从flask_登录导入当前_用户
admin\u bp=Blueprint('admin',\uuuuu name\uuuuuuu,template\u folder='templates'))
@请求前的管理bp
def load_logged_in_user():
如果当前用户和非当前用户是匿名的:
user\u name=当前用户。user\u name
g、 user=Account.get(用户名)
从…起导入视图1、视图2、视图3、视图4
myapp/admin/view1.py
来自。导入管理程序
@admin_bp.route('/hello',methods=['GET'])
def hello():
返回“你好”

这是没有任何具体错误的工作。但是那些视图文件和admin/_init__.py文件正在相互导入(循环依赖),这应该避免。如何使用蓝图构建我的应用程序而不存在循环依赖关系?

我认为最好为每个视图使用单独的蓝图

否则,为了避免循环依赖,可以使用方法。因此,您将拥有以下文件:

myapp/admin/\uuuuu init\uuuuuu.py

from flask import Blueprint, g, session, abort, request
from flask_login import current_user

admin_bp = Blueprint('admin', __name__, template_folder='templates')

@admin_bp.before_request
def load_logged_in_user():
    if current_user and not current_user.is_anonymous:
        user_name = current_user.user_name
        g.user = Account.get(user_name)

from . import views1, views2
bp.add_url_rule('/hello', view_func=views1.hello)
bp.add_url_rule('/hello2', view_func=views2.hello2)
def hello():
    return 'Hello'
myapp/admin/view1.py

from flask import Blueprint, g, session, abort, request
from flask_login import current_user

admin_bp = Blueprint('admin', __name__, template_folder='templates')

@admin_bp.before_request
def load_logged_in_user():
    if current_user and not current_user.is_anonymous:
        user_name = current_user.user_name
        g.user = Account.get(user_name)

from . import views1, views2
bp.add_url_rule('/hello', view_func=views1.hello)
bp.add_url_rule('/hello2', view_func=views2.hello2)
def hello():
    return 'Hello'