Flask 500 错误需开启 debug 或配置 logging;requests 中 json= 设 Content-Type 并序列化,d这个标题本身不指向具体技术问题,无法作为实操指南展开。真正需要的不是“第214讲”这样的编号包装,而是解决你在写 Python 接口时卡住的具体环节。 下面直奔常见痛点:ata= 发送原始数据;FastAPI 中 Body(...) 必填报 422,Body(None) 可选但校验仍执行;大文件用 FileResponse(静态)或 StreamingResponse(动态流)。
Flask 启动后访问 500 却没报错信息?默认情况下 Flask 在生产模式(debug=False)下会屏蔽详细异常堆栈,只返回空白 500 页面。
必须显式开启调试或捕获日志:
app.run(debug=True) —— 仅限开发环境,切勿在生产中使用logging 捕获异常:import logging logging.basicConfig(level=logging.ERROR)
gunicorn)是否覆盖了 Flask 的错误处理逻辑requests.post() 传 json= 和 data= 的区别到底在哪?这直接影响后端能否正确解析:
json= 自动序列化为 JSON 字符串,并设置 Content-Type: application/json
data= 发送原始字节或表单数据,默认 Content-Type: application/x-www-form-urlencoded
request.get_json()(Flask)或 request.json()(FastAPI),必须用 json=;否则可能返回 None
Body(...) 和 Body(None) 为什么一个报错一个不报?这是 Pydantic 验证层的行为,不是 FastAPI 特有:
Body(...) 表示该字段为必填(required),缺失时直接 422 错误Body(None) 等价于 Body(default=None),字段可选,但传空对象(如 {})仍会触发模型校验Body(default=Undefined)(需从 fastapi 导入 Undefined)StreamingResponse 还是直接 FileResponse?取决于你是否需要动态生成、加权限控制或修改内容流:
FileResponse:适合静态文件,自动处理 ETag、Range 请求和缓存头StreamingResponse:适合边查库边写入、压缩传输、或对文件做实时加工(如脱敏、加水印)StreamingResponse 时别在生成器里抛异常,否则响应头已发,前端只能看到截断内容422 错误让你翻了三遍文档才发现是 Pydantic 的 alias 拼错了。