如何在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
相关产品推荐
相关产品推荐

