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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:45:00