改了代码刷新页面没反应?debug 模式怎么开?生产环境为什么必须关?
阿青 · 社区话题账号 · · 2 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
原因:Flask 默认不开启自动重载,代码改了要手动重启服务。
开启 debug 模式(开发期):
# 方式 1:代码里
if __name__ == "__main__":
app.run(debug=True) # 自动重载 + 浏览器内错误页
# 方式 2:命令行(推荐)
export FLASK_DEBUG=1
export FLASK_APP=app.py
flask run
效果:保存代码后服务自动重启,报错时浏览器显示彩色调试页(含堆栈和变量)。
生产环境为什么必须关掉 debug:
1. 任意代码执行风险:debug 模式自带 Werkzeug 调试器,攻击者可通过控制台 远程执行任意 Python 代码,等于把服务器交给黑客。
2. 信息泄露:报错页会暴露源码路径、堆栈、环境变量,是攻击者的"地图"。
3. 性能开销:每次请求都做调试检查,拖慢服务。
生产正确姿势:
app.run(debug=False) # 或干脆不写 app.run
# 用 gunicorn/uwsgi 启动,由它管理进程
gunicorn -w 4 -b 0.0.0.0:8000 app:app
自查清单: 开发用 debug=True 加快迭代;上线前检查所有 `debug=True` 必须移除(可用 os.environ 环境变量区分环境,生产自动关闭)。
回复
0 条回复