Python 烧瓶蓝图:第一个输入和输出对象的含义

Python 烧瓶蓝图:第一个输入和输出对象的含义,python,flask,Python,Flask,我需要一个解释,而不是帮助解决一个特定的代码问题 我正在编写一个烧瓶应用程序,使用我在3个不同教程中找到的建议。今天的问题是因为大多数博客使用的示例与文件夹、文件、blueprint对象以及blueprint本身的第一个参数的名称完全相同 示例通常位于目录“web”中,文件名为web.py(或\uuuu init\uuuu.py),在该文件中我们可以看到: from flask import Blueprint web = Blueprint('web', __name__) web这个词的用

我需要一个解释,而不是帮助解决一个特定的代码问题

我正在编写一个烧瓶应用程序,使用我在3个不同教程中找到的建议。今天的问题是因为大多数博客使用的示例与文件夹、文件、blueprint对象以及blueprint本身的第一个参数的名称完全相同

示例通常位于目录“web”中,文件名为
web.py
(或
\uuuu init\uuuu.py
),在该文件中我们可以看到:

from flask import Blueprint
web = Blueprint('web', __name__)
web这个词的用法太多了,我想了解每一个词各自的作用

然后在应用程序工厂中,这些示例具有以下效果

from app.web import web
app.register_blueprint(web)
同样,为清晰起见,字符
web
使用次数过多

在我正在使用的示例中,我违反了这个约定,拥有一个名为“auth”的文件夹。在那里,我有一个创建蓝图对象“auth\u bp”的
\uu init\uuuuuuuuuuupy
。今天,我需要您的帮助,以了解使用不同名称作为第一个参数的影响:

auth_bp = Blueprint('auth_whatever', __name__)
在路线的整个代码中,使用以下代码似乎一切正常:

@auth_bp.route('/login', methods=['GET', 'POST'])
因此,路由的名称似乎是
auth\u bp

除此之外,在开发模式中,当代码到达请求
url\u的视图的代码部分时,会出现错误。在我的实验中,此时蓝图的名称应该是
auth\u which

url_for('auth_whatever.login')
我理解正确吗?装饰器中蓝图的“名称”是
auth\u bp
,但
url\u中使用的名称是我在
blueprint
的第一个参数中给出的名称


如果你说“只要说出所有相同的东西,它就会起作用。”我完全同意。但我不喜欢在没有真正理解WTF的情况下这样做。

在你的第一个代码片段中,你创建变量
web
,并为它分配一个类型为
Blueprint
的对象。现在可以使用名称
web
引用此对象并在代码中对其进行操作。在创建过程中,您将其命名为“web”。正如您已经在文本中进一步了解的那样,这意味着您必须在调用
url\u for
时使用此值。下文对此进行了解释:

类flask.Blueprint(名称[…])

[……]

名称–蓝图的名称。将在每个端点名称前加上前缀


由于这种情况通常发生在(子)包
web/\uuu init\uuuuuuuupy
中,因此您可以通过将变量
web
作为
从app.web导入web
导入到第二个代码段中来访问它。第一个“web”指的是包,第二个“web”指的是前面定义的变量。下一行将变量传递给app.register_blueprint()

如果您有后续问题,请留下评论,如果可以,我将扩展我的答案。我不明白为什么装饰者使用左侧名称“auth_bp”,而蓝图使用的名称只是“auth”。我知道这是事实,但我很惊讶地问了这个问题。谢谢你的回答,我同意你的描述。这和我想确认的结论是一样的。为什么是-1?因为我有python-3作为标记?