有没有一种简单的方法可以告诉Django runserver覆盖settings.py文件中的单个变量?
我很乐意打电话给:
python manage.py runserver 0.0.0.0:8000 Debug=False
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
动机:有一个特定的站点,有数百个数据库查询来显示或保存特定的页面,我希望能够快速关闭调试,而无需编辑我的设置文件(有可能被遗忘).
Gag*_*arr 19
我认为你有两种选择
最简单的可能是自定义设置覆盖,类似于:
# no_debug_settings.py
# pull in the normal settings
from settings import *
# no debug for us
DEBUG = False
Run Code Online (Sandbox Code Playgroud)
现在,当你想在没有调试的情况下启动时,你将运行:
python manage.py runserver --settings=no_debug_settings 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以自定义您的manage.py文件.导入设置,并将其传递给execute_manager.如果您在导入和调用之间添加了一些代码,则可以检查其他参数并根据需要更改设置.它更加繁琐,容易被打破/被遗忘,所以我建议覆盖设置包装器可能是你最好的方法.
我settings.py用条件块编辑了我的文件,如下所示:
import os # If needed.
if os.environ.get('DJANGO_DEBUG'):
print("Debug is enabled.")
DEBUG = True
# When not specified, ALLOW_HOSTS defaults to:
# ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]']
else:
DEBUG = False
ALLOWED_HOSTS = ["*"]
Run Code Online (Sandbox Code Playgroud)
然后,通过传递环境变量来运行您的服务器DJANGO_DEBUG=1.只要您保持一致,就可以将变量命名为任何名称:
DJANGO_DEBUG=1 python -Wall manage.py runserver
Run Code Online (Sandbox Code Playgroud)
在调用manage.py禁用调试时省略该环境变量(因为将其设置为任何值,包括0仍将使其适用于Python代码.)
更新:一位意见提供者声明该ALLOWED_HOSTS指令在被忽略时DEBUG被忽略True.这仅适用于旧版本的Django.ALLOWED_HOSTS如果DEBUG启用时未指定,则当前行为是为了遵守或默认为localhost地址.我的答案已更新,以反映这是一个小的修正.
这来自Django文档:
当DEBUG为True且ALLOWED_HOSTS为空时,主机将针对['localhost','127.0.0.1','[:: 1]']进行验证
此外,它表明您的评论行为现在已在几个主要版本行中过时:
在旧版本中,如果DEBUG = True,则不检查ALLOWED_HOSTS.在Django 1.10.3,1.9.11和1.8.16中也改变了这一点,以防止DNS重新绑定攻击.
| 归档时间: |
|
| 查看次数: |
14223 次 |
| 最近记录: |