Flask 500 错误需开启 debug 或配置 logging;requests 中 json= 设 Content-Type 并序列化,data= 发送原始数据;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)
- 检查 WSGI 服务器(如
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
FastAPI 中 Body(...) 和 Body(None) 为什么一个报错一个不报?
这是 Pydantic 验证层的行为,不是 FastAPI 特有:
-
Body(...)表示该字段为必填(required),缺失时直接 422 错误 -
Body(None)等价于Body(default=None),字段可选,但传空对象(如{})仍会触发模型校验 - 想允许完全不传且跳过校验?得用
Body(default=Undefined)(需从fastapi导入Undefined)
接口返回大文件时,用 StreamingResponse 还是直接 FileResponse?
取决于你是否需要动态生成、加权限控制或修改内容流:
立即学习“Python免费学习笔记(深入)”;
-
FileResponse:适合静态文件,自动处理ETag、Range请求和缓存头 -
StreamingResponse:适合边查库边写入、压缩传输、或对文件做实时加工(如脱敏、加水印) - 注意:用
StreamingResponse时别在生成器里抛异常,否则响应头已发,前端只能看到截断内容
422 错误让你翻了三遍文档才发现是 Pydantic 的 alias 拼错了。










