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

如何在Flask Web应用中检测HTTP请求是否来自重定向?

判断Flask请求是否来自重定向的实现方案

Flask本身并没有内置判断请求是否来自重定向的属性——因为HTTP重定向本质是浏览器收到3xx响应后发起的全新GET请求,这个请求和普通GET请求在协议层面没有区别。你得自己给重定向的请求加个标记,下面是两种简单可行的方案:

方案一:通过查询参数传递标记

在发起重定向时,给目标URL附加一个自定义查询参数,然后在首页路由里检查这个参数:

重定向发起代码

@app.route('/some-redirect-source')
def redirect_source():
    # 重定向到首页时添加查询参数
    return redirect(url_for('home', from_redirect='1'))

首页路由判断逻辑

@app.route('/', methods=['GET', 'POST'])
def home():
    # 检查是否存在标记参数
    is_redirect = request.args.get('from_redirect') == '1'
    
    if is_redirect:
        # 处理来自重定向的请求逻辑
        print("请求来自重定向")
    else:
        # 处理普通请求逻辑
        print("普通请求")
    
    # 执行通用逻辑
    return "首页内容"

这个方案简单直接,但标记会暴露在URL中,如果介意的话可以用下面的Session方案。

方案二:通过Session存储标记

利用Flask的Session来存储重定向标记,这样不会暴露在URL里,适合需要隐藏标记的场景:

重定向发起代码

@app.route('/some-redirect-source')
def redirect_source():
    # 在session中存入重定向标记
    session['from_redirect'] = True
    return redirect(url_for('home'))

首页路由判断逻辑

@app.route('/', methods=['GET', 'POST'])
def home():
    # 从session中取出标记,同时移除这个标记避免影响后续请求
    is_redirect = session.pop('from_redirect', False)
    
    if is_redirect:
        # 处理来自重定向的请求逻辑
        print("请求来自重定向")
    else:
        # 处理普通请求逻辑
        print("普通请求")
    
    # 执行通用逻辑
    return "首页内容"

注意:使用Session需要先配置Flask的SECRET_KEY,比如在app初始化时添加:

app.secret_key = 'your-secret-key-here'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:45:07