setting.py
Django的settings文件包含Django应用的所有配置项。
配置文件只是一个使用模块级变量的一个Python模块。
因为配置文件是Python模块,所以要注意以下几项:
-
不能有Python语法错误
-
可以用Python语法实现动态配置
- 可以从其他配置文件中引入变量
指定配置文件
使用Django时要通知Django当前使用的是哪个配置文件。可以改变环境变量 DJANGO_SETTINGS_MODULE 实现这一点。
通常我们使用这种方式来设置配置文件的路径:
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django_2018.settings')
这个在manage.py中有体现,在启动web服务前,先将配置文件路径加入到环境变量。
#!/usr/bin/env python import os import sys if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Django_2018.settings') #设置环境变量 try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv)
On the server (mod_wsgi)
在服务器环境下,要通知WSGI应用当前使用的是哪个配置文件,用到 os.environ:
import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
在Python代码中使用settings
from django.conf import settings print(settings.BASE_DIR)
注意 django.conf.settings 并不是一个模块!-- 而是一个对象!所以引入某个单独的设置项是不可能的
还要注意 不应该 直接引入 global_settings 和你自己的配置文件. django.conf.settings 整合了默认配置和网站指定配置, 从而只提供一个接口读取配置. 它也解耦了使用自定义配置文件的代码.
安全
由于配置文件包含敏感信息, 比如数据库密码, 所以应该限制对配置文件的访问. 比如更改文件权限, 从而只能令你和你的WEB服务器能读取配置文件. 这在共享主机的环境中非常重要!
Using settings without setting DJANGO_SETTINGS_MODULE
某些场合中, 你想绕过 DJANGO_SETTINGS_MODULE 环境变量来进行配置. 比如, 你正在使用django自带的模板系统, 而你并不想使用环境变量指定某个具体的配置文件.
from django.conf import settings settings.configure(DEBUG=True)
通过 configure() 可以设置任何配置项, 每个参数对应一个值. 参数名称必须大写, 而且参数名必须是真实存在. 没有在 configure() 中出现的设置项在随后用到时, 仍会使用默认值.
如果你并不想使用整个框架, 仅仅是其中一小部分时, 如上述这般配置Django是非常必要的. 事实上, 我们建议您这样做.
因此, 通过 settings.configure() 配置django时, 并不会对当前进程的环境变量做任何修改.(可以查看 TIME_ZONE 了解为什么要这么做). 这意味着在上述情况下你仍然完全掌控着当前环境.
浙公网安备 33010602011771号