如何为返回redirect的Flask函数设置Cookie?
方法1:直接操作redirect返回的响应对象
Flask的redirect()函数本质上返回的是一个Response实例,你完全可以先获取这个响应对象,再调用set_cookie()方法设置Cookie,最后返回该对象。这是最直接的方案:
from flask import redirect @app.route('/create_application', methods=['POST']) def create_application(): # 执行创建application的逻辑,这里假设已生成application对象 application = YourApplicationModel(...) application.save() # 保存到数据库 # 生成重定向响应 redirect_resp = redirect('/target_page') # 设置Cookie,注意将application.id转为字符串(Cookie值仅支持字符串类型) redirect_resp.set_cookie('application_id', str(application.id)) # 可额外配置Cookie参数,比如过期时间、生效路径等 # redirect_resp.set_cookie('application_id', str(application.id), max_age=3600, path='/') return redirect_resp
方法2:用@app.after_request结合g对象传递数据
如果需要在多个视图中复用Cookie设置逻辑,可以借助after_request装饰器。通过Flask的g对象(请求上下文全局变量)传递application.id:
from flask import g, redirect @app.route('/create_application', methods=['POST']) def create_application(): application = YourApplicationModel(...) application.save() # 将application.id存入g对象,供后续after_request钩子读取 g.application_id = application.id return redirect('/target_page') @app.after_request def set_app_cookie(response): # 检查g对象中是否存在目标值,避免给其他请求误加Cookie if hasattr(g, 'application_id'): response.set_cookie('application_id', str(g.application_id)) return response
替代方案:通过重定向参数传递,在目标路由设置Cookie
如果重定向的目标是本应用内的路由,也可以把application.id作为查询参数传递,在目标路由中完成Cookie设置:
from flask import redirect, request, make_response, render_template @app.route('/create_application', methods=['POST']) def create_application(): application = YourApplicationModel(...) application.save() # 将app_id作为查询参数拼接到重定向地址中 return redirect(f'/target_page?app_id={application.id}') @app.route('/target_page') def target_page(): app_id = request.args.get('app_id') if app_id: # 渲染页面并设置Cookie resp = make_response(render_template('target.html')) resp.set_cookie('application_id', app_id) return resp # 无app_id参数时直接返回页面 return render_template('target.html')
内容的提问来源于stack exchange,提问作者Lucky
相关产品推荐
相关产品推荐

