在URL中添加变量
在Flask中,我们可以通过在URL中添加变量来实现动态路由。这意味着我们可以根据不同的变量值显示不同的输出。
定义动态路由
要定义一个动态路由,我们可以在路由的URL中使用尖括号来包裹变量名。例如:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return 'User %s' % username
if __name__ == '__main__':
app.run()
在上面的示例中,我们定义了一个名为`show_user_profile`的路由处理函数,并且在URL中添加了一个名为`username`的变量。当用户访问`/user/John`时,Flask将调用`show_user_profile`函数,并将`John`作为参数传递给该函数。
请注意,我们需要在函数的参数列表中添加与URL变量名称相匹配的参数,以便Flask可以将变量的值传递给函数。
使用URL变量
一旦我们在路由中定义了URL变量,我们就可以在处理函数中使用它。例如,我们可以根据不同的用户名显示不同的用户信息:
@app.route('/user/<username>')
def show_user_profile(username):
# 根据用户名查询用户信息
user = query_user(username)
# 返回用户信息
return 'Username: %s, Email: %s' % (user.username, user.email)
在上面的示例中,我们从数据库中查询了与`username`变量匹配的用户信息,并使用`user.username`和`user.email`分别获取了用户名和电子邮件地址。
限制URL变量
Flask还允许我们对URL变量进行限制,以确保它们的值符合我们预期的格式。例如,我们可以使用正则表达式来限制用户名只能包含字母和数字:
from flask import Flask
app = Flask(__name__)
@app.route('/user/<re(r"[a-zA-Z0-9]")>')
def show_user_profile(username):
return 'User %s' % username
if __name__ == '__main__':
app.run()
在上面的示例中,我们使用了`re(r"[a-zA-Z0-9]")`作为URL变量的限制条件,这意味着变量的值只能由字母和数字组成。
访问URL变量
要在模板中访问URL变量,我们可以使用`url_for`辅助函数。`url_for`函数需要知道路由和变量名,以及变量的值。例如:
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return render_template('profile.html', username=username)
if __name__ == '__main__':
app.run()
在上面的示例中,我们在`render_template`函数中使用了`username`变量,并将其传递给模板`profile.html`。模板中可以通过`{{ username }}`访问这个变量。
总结
通过在URL中添加变量,我们可以实现动态路由,根据不同的变量值显示不同的输出。Flask提供了简单的方式定义和使用URL变量,以及对它们进行限制和访问。