Django settings配置

在看Celery的文档,其中和Django相关的部分文档,其中和Django的settings有关系的设置,如下,不是很懂,所以研究了一下关于这2个settings的作用。

1:Celery官方文档

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

其中第一个关于settings的设置

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
这个是设置环境变量,Django的设置模块是用的proj.settings

其实这个的意思就是,Django调用的是哪个设置文件。
我们在manage.py的内部,其实就可以看到这个设置

#!/usr/bin/env python
import os
import sys

if __name__ == '__main__':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'NBAsite.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)

从上面的文件内容可以看到,它实际上配置的就是我们项目名NBAsite的settings文件。

第二个关于settings的内容

app.config_from_object('django.conf:settings', namespace='CELERY')
一开始没看明白django.conf:settings这个代表什么意思,通过搜索,看到这个其实是一个代表settings的对象,看一下官方文档。

Django settings配置_第1张图片
文档说明

所以我理解的是,django.conf.settings其实就是代表当前django项目所使用的settings的对象

Django settings配置_第2张图片
默认情况下如何调用settings

可以看到,django是先默认使用global_settings.py,然后再从每个项目自身的settings里面提取其他设置,如果有一样的参数,则覆盖,有新的参数,则导入。

2:测试

我们看一下,是不是真的django.conf.settings代表着目前使用中的settings


Django settings配置_第3张图片
测试情况

可以看到,我们在命令行里面导入了settings,通过settings读取EMAIL_HOST的设定,就可以读到了项目设置里面的内容。

但是要注意的是,测试时候一定要用python manage.py shell
而不可以直接用python直接进入,因为直接用python命令进入的话,相当于没有启动manage.py,就没有对settings进行设置。

3:不同的设置内容

Django还提供了一个命令,以此来看global_settings和项目自身settings里的不同的地方

Django settings配置_第4张图片
文档说明diffsettings
Django settings配置_第5张图片
设置不同的地方

参考文档:
https://docs.djangoproject.com/en/2.2/topics/settings/

你可能感兴趣的:(Django settings配置)