Django项目的设置文件位于项目同名目录下,名叫settings.py。这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证。
一、简述
settings.py文件本质上是一个Python模块,带有模块级别的变量。
下面是一些示例设置:
ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = 'webmaster@example.com'。
注:当DEBUG为False时,必须设置ALLOWED_HOSTS的值。
配置settings.py时: 不允许出现Python层面的语法错误;
可以使用普通的Python语法动态地设置,例如:MY_SETTING = [str(i) for i in range(30)];
可以从其它设置文件导入值。
二、指定配置文件
当你使用Django时,你必须告诉它你要使用哪个配置文件来启动服务。也就是给环境变量
DJANGO_SETTINGS_MODULE赋值。这个值要使用Python路径的语法,例如mysite.settings,而不是操作系统
的文件路径语法。 注意,被设置的配置文件应该在Python的导入查找路径中。
默认情况下,我们是不需要设置这个变量的,直接启动项目就可以。但是,有时候就会有需要使用别的配置启动
项目的情形。
django-admin命令:
当使用django-admin命令时, 可以设置临时环境变量,或者每次运行该工具时显式地指定配置文件。
例如在Unix Bash shell下
export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver
在Windows shell下,也就是cmd环境:
set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver
django-admin runserver --settings=mysite.settings
三、默认配置
Django的配置文件并不需要定义所有的选项,每个选项都有一个默认值,这些默认值位于
django/conf/global_settings.py模块中。
Django加载配置的顺序是这样的:
从global_settings.py中加载默认配置;
从指定的配置文件中加载(通常是settings.py),如有必要则覆盖global_settings.py中的默认配置。
有一个简单的方法可以查看当前有哪些设置与默认的设置不一样了,也就是python manage.py diffsettings命
令。
四、在Django环境中使用settings
所谓的在Django环境中,指的是要使用settings的模块(可以简单的理解为局域网内主机),必须是Django工作
状态中能够链接的模块,不能是孤零零,额外的一个Python脚本(外部主机)。这时,可以通过导入
django.conf.settings来使用配置文件。 例如:
from django.conf import settings
if settings.DEBUG:
# Do something
五、configure()或DJANGO_SETTINGS_MODULE二者只能用一
如果你没有设置DJANGO_SETTINGS_MODULE环境变量,你必须使用configure()方法来加载配置。。
如果你没有设置DJANGO_SETTINGS_MODULE,也没有调用configure(),在首次调用配置文件时Django 将引发
一个ImportError异常。也就是我们最常见的问题:为啥我启动不了Django?为什么我的脚本不能调用Django
的功能?为什么我的代码无法链接到Django内部?
如果你设置了DJANGO_SETTINGS_MODULE,并访问了一下设置,然后又调用configure(),Django 将引发一个
RuntimeError异常,表示已经有配置,不要重复配置。
有个属性正好可以用于种情况,防止出现异常:
from django.conf import settings
if not settings.configured:
settings.configure(myapp_defaults, DEBUG=True)
总结:configure()或DJANGO_SETTINGS_MODULE只能用一个,并且只能用一次。不可以两个都用和都不用。