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

如何在Flask RESTful API的make_response中设置Cookie?

当然可以实现!

你现在的核心需求是在返回JSON数据的POST响应里同时带上Cookie对吧?问题出在你原来的setcookie方法是单独创建了一个新的响应对象,但HTTP请求一次只能返回一个响应,所以我们需要把Cookie附加到你要返回的那个JSON响应上,而不是分开返回两个响应。

这里有两种实现方式,看你更倾向哪一种:

方式一:直接在POST方法中处理(最直观)

直接在你的POST方法里创建好JSON响应对象后,调用set_cookie方法给它加上Cookie,再返回这个对象就行:

from flask import make_response, jsonify
from flask_restful import Resource

class YourAPIResource(Resource):
    def post(self):
        # 这里是你的业务逻辑,生成objects_list的代码
        objects_list = [{"user_info": "example_data"}]  # 示例数据
        
        # 先创建包含JSON内容的响应对象
        resp = make_response(jsonify(objects_list[0]), 200)
        
        # 生成你需要的Cookie值(和你原来的逻辑一致)
        userid = 12345  # 替换成你实际获取到的userid
        code = "xyz789"  # 替换成你实际获取到的code
        check = str(userid) + code
        
        # 给响应对象设置Cookie
        resp.set_cookie('cook', check)
        # 可选:你还可以添加Cookie的安全参数,比如
        # resp.set_cookie('cook', check, httponly=True, max_age=3600, path='/')
        
        return resp

方式二:复用你的setcookie方法(改造后)

如果你想保留setcookie方法的复用性,可以把它改成接收已有的响应对象,而不是自己创建新的:

from flask import make_response, jsonify
from flask_restful import Resource

class YourAPIResource(Resource):
    def setcookie(self, resp, userid, code):
        check = str(userid) + code
        resp.set_cookie('cook', check)
        # 不再返回新响应,直接修改传入的响应对象
        
    def post(self):
        # 业务逻辑生成objects_list
        objects_list = [{"user_info": "example_data"}]
        
        # 创建JSON响应对象
        resp = make_response(jsonify(objects_list[0]), 200)
        
        # 调用改造后的setcookie方法给响应加Cookie
        self.setcookie(resp, userid=12345, code="xyz789")
        
        return resp

关键说明:

原来的setcookie方法之所以不适用,是因为它创建了一个全新的响应(内容是setting cookie),但你需要的是返回JSON数据的那个响应。所以核心就是在同一个响应对象上完成JSON内容和Cookie的设置,这样客户端就能同时收到JSON数据和Cookie了。

内容的提问来源于stack exchange,提问作者a.beno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:44:57