3

来自 Flask 文档:

def index():
    pass
app.add_url_rule('/', 'index', index)

它还说:

端点 – 注册 URL 规则的端点。Flask 本身将视图函数的名称假定为端点

确实,如果我这样做app.add_url_rule('/', None, index),一切似乎都很好。(我不确定术语以及“端点”实际上是什么。)

一些进一步的问题:

  1. 有什么理由指定第二个参数吗?

  2. 第二个论点确实是“终点”吗?

  3. (不)指定第二个参数的好处/缺点是什么?

  4. 如果在另一个 url 规则中使用相同的名称怎么办?第一个被覆盖了吗?这是故意的吗?

4

2 回答 2

2

在这种情况下,端点只是应用程序有效 URL 的一个术语。来自维基百科:

在面向服务的架构中,端点是服务、进程、队列或主题目的地的入口点

至于命名您的 URL - 是的,它是可选的。定义名称有一些好处。例如,当使用 *url_for*() 或redirect () 时,您可以指定 url 的名称作为快捷方式。这带来了额外的好处,即允许您更改 url 结构,而无需更改与该 url 交互的每一行代码,因为它仅按名称引用它。

因此,在您的示例中,您可以像这样引用您的索引网址:

return redirect('index')

对于你的最后一个问题,我不确定会发生什么。尝试使用该名称解析 url 时可能会出错。无论哪种方式,都没有理由定义两个具有相同名称的不同 url。

于 2013-05-18T20:07:35.493 回答
1

第二个论点的原因如下:

假设您正在设计一个网站,并且您/login是用户输入其用户名、密码、OpenID 等的页面。成功登录后,您可能希望将它们发送到/. 在 Flask 中,执行此操作的规范方法是:

return redirect(url_for('index'))

'index'您定义为处理程序的函数的名称在哪里/,例如,

@app.route('/')
def index():
    return render_template('index.html')

如果您改为:

def index():
    return render_template('index.html')

app.add_url_rule('/', None, index)

当您的用户明确请求时,它会正常工作/,但是当您的用户成功登录时,他们将面临可怕的错误消息并且必须/手动访问。

简而言之,这是正确的做法。

另外,你应该注意

@app.route('/')
def index():
    return render_template('index.html')

def index():
    return render_template('index.html')

app.add_url_rule('/', 'index', index)

完全相同,并且在最后两个片段中redirect(url_for('index'))都可以完美运行。

于 2013-05-18T20:19:20.440 回答