Flask使用自定义ApiResponse类返回响应为空问题求助
Flask自定义ApiResponse返回空响应体的问题修复
你的问题出在将jsonify返回的Response对象作为参数传给父类Response的response参数,这会导致Flask处理响应时出现嵌套逻辑错误,最终返回空内容。
jsonify()本身就会创建并返回一个完整的Response实例,包含正确的Content-Type头和序列化后的JSON内容。当你把它作为response参数传给super().__init__()时,相当于把一个Response对象当作响应体的原始内容传入,这不符合Flask的响应处理规范,导致实际返回的响应体为空。
修复后的ApiResponse代码
方式一:手动序列化JSON字符串
from flask import Response import json class ApiResponse(Response): def __init__(self, status_code, entity, message=None): response_data = { "status": status_code, "data": entity.to_dict(), "message": message, } # 直接传入序列化后的JSON字符串,替代jsonify返回的Response对象 super().__init__( response=json.dumps(response_data), status=status_code, content_type="application/json", )
方式二:利用Flask Response的自动序列化特性
from flask import Response class ApiResponse(Response): def __init__(self, status_code, entity, message=None): response_data = { "status": status_code, "data": entity.to_dict(), "message": message, } # Flask Response支持直接接收字典,自动序列化为JSON super().__init__( response=response_data, status=status_code, content_type="application/json", )
验证效果
修复后,你的sign_up视图无需修改,直接返回ApiResponse实例即可。Postman测试时会正常返回包含status、data、message字段的JSON响应体,同时保持201状态码。
内容的提问来源于stack exchange,提问作者sowebull
相关产品推荐
相关产品推荐

