You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在使用Jinja语法的HTML重定向过程中传递变量?

Flask重定向传递模板变量的解决方案

问题描述

用户编写的Flask登录路由代码:

@app.route("/", methods=["GET", "POST"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    elif request.method == "POST":
        username, password = request.form.get("username"), request.form.get("password")
        if validate_login(username, password):
            return redirect("/home.html")
        else:
            return render_template("login.html", login_message="Invalid username or password!")

对应的home.html模板代码:

{% extends "layout.html" %}

{% block body %}
    Hello {{ username }}, your password is {{ password }}!
{% endblock %}

需求:希望通过redirect函数像render_template一样传递变量给home.html。

实现方法

Flask的redirect返回的是HTTP重定向响应,浏览器会重新发起请求,原请求的变量无法直接传递给目标页面,可通过以下方式实现:

1. 查询参数传递(不推荐用于敏感数据)

将变量拼接为URL的查询参数,在目标路由中获取后传给模板:

# 修改登录路由的重定向逻辑
if validate_login(username, password):
    return redirect(url_for('home', username=username, password=password))

# 新增home路由处理参数
@app.route("/home")
def home():
    username = request.args.get('username')
    password = request.args.get('password')
    return render_template("home.html", username=username, password=password)

注意:密码等敏感信息严禁通过URL传递,会暴露在地址栏、浏览器历史和服务器日志中,此方式仅适用于非敏感数据。

2. 会话(Session)存储(推荐)

利用Flask的session存储用户信息,在目标路由中取出后渲染模板,安全性更高:

# 先为Flask应用配置SECRET_KEY(必须)
app.secret_key = 'your-secure-random-secret-key'

# 修改登录路由
if validate_login(username, password):
    session['username'] = username
    # 敏感信息如密码不要存入session,实际场景应存储用户ID,再从数据库获取用户详情
    return redirect(url_for('home'))

# home路由获取会话数据
@app.route("/home")
def home():
    username = session.get('username')
    # 实际业务中通过用户ID查询数据库获取所需信息
    return render_template("home.html", username=username)

3. 直接渲染模板(不推荐)

若业务场景允许,可跳过重定向,直接在登录验证通过后渲染home.html:

if validate_login(username, password):
    return render_template("home.html", username=username, password=password)

缺点:不符合Post/Redirect/Get设计模式,用户刷新页面会重新提交表单,可能引发重复操作。

内容的提问来源于stack exchange,提问作者Noobie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:31:21