文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
生成链接
现在的登录表单已经相当完整了,但在结束本章之前,我想讨论在模板和重定向中包含链接的妥当方法。 到目前为止,你已经看到了一些定义链接的例子。 例如,这是当前基础模板中的导航栏代码:
<div>
Microblog:
<a href="/index">Home</a>
<a href="/login">Login</a>
</div>
登录视图函数同样定义了一个传入到 redirect()
函数作为参数的链接:
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# ...
return redirect('/index')
# ...
直接在模板和源文件中硬编码链接存在隐患,如果有一天你决定重新组织链接,那么你将不得不在整个应用中搜索并替换这些链接。
为了更好地管理这些链接,Flask 提供了一个名为 url_for()
的函数,它使用 URL 到视图函数的内部映射关系来生成 URL。 例如, url_for('login')
返回 /login
, url_for('index')
返回 /index
。 url_for()
的参数是 endpoint 名称,也就是视图函数的名字。
你可能会问,为什么使用函数名称而不是 URL? 事实是,URL 比起视图函数名称变更的可能性更高。 稍后你会了解到的第二个原因是,一些 URL 中包含动态组件,手动生成这些 URL 需要连接多个元素,枯燥乏味且容易出错。 url_for()
生成这种复杂的 URL 就方便许多。
因此,从现在起,一旦我需要生成应用链接,我就会使用 url_for()
。基础模板中的导航栏部分代码变更如下:
<div>
Microblog:
<a href="{{ url_for('index') }}">Home</a>
<a href="{{ url_for('login') }}">Login</a>
</div>
login()
视图函数也做了相应变更:
from flask import render_template, flash, redirect, url_for
# ...
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# ...
return redirect(url_for('index'))
# ...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论