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

