Python Bottle 0.12 中如何检测当前是否运行在debug开发模式下
问题原因
Bottle 0.12的模块级全局DEBUG变量和app.run(debug=True)传入的参数是两套独立的配置:
- 模块级
DEBUG是默认值为False的全局变量,仅在手动显式赋值时才会变化 app.run(debug=True)传入的参数只会修改当前应用实例的debug属性,不会同步修改模块级的全局DEBUG变量,所以你读取全局DEBUG永远得到False
解决方案
直接读取应用实例的debug属性即可实现需求,有两种常用写法:
方案1:直接引用自定义的app实例(最推荐)
如果你是自己初始化的Bottle实例,直接读取实例的debug属性判断即可,示例代码:
from bottle import Bottle, abort, template app = Bottle() @app.route('/debug') def debug(): if not app.debug: abort(404) return template('debug.html') if __name__ == '__main__': # 此处传入的debug=True会自动修改app.debug属性 app.run(debug=True)
方案2:读取默认应用实例的debug属性
如果你用的是Bottle的默认应用实例,没有自定义实例变量,可以通过default_app获取:
from bottle import route, abort, template, default_app @route('/debug') def debug(): if not default_app().debug: abort(404) return template('debug.html')
补充说明
生产环境部署时默认不会开启debug配置,该判断逻辑可以保证debug路由仅在开发模式下可访问,符合安全要求。
内容的提问来源于stack exchange,提问作者neurino
相关产品推荐
相关产品推荐

