讲述了如何切换Django的设置

首先

我用Django开发Web应用,
在Heroku上,我认为有时候希望在生产环境或者暂存环境上更改功能。
这种情况下,我们需要根据环境来创建settings文件。
请注意,我正在使用Django 1.10.7版本。

开始进行项目制作

1.png

一般来说,会加载上述的 mysite/settings.py 文件。

试着创建另一个设置。

2.png

如果继续运行 python manage.py runserver,将会出现错误,所以让我们改变加载目标。

需要改变什么地方

3.png

具體來說

这两个文件中各有一处写着 os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “mysite.settings”) 的地方。
这将成为读取 settings 的位置。

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

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        try:
            import django
        except ImportError:
            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?"
            )
        raise
    execute_from_command_line(sys.argv)

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = get_wsgi_application()

把它变成这样吧!

为了让开发在 Mac 上可以加载 mysite/settings/local.py,请将其改写为 os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “mysite.settings.local”)。

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

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        try:
            import django
        except ImportError:
            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?"
            )
        raise
    execute_from_command_line(sys.argv)

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings.local")

application = get_wsgi_application()

在生产环境中如何处理

我认为读到这里的人应该能理解,Django的设置文件可以通过环境变量DJANGO_SETTINGS_MODULE来更改加载的位置。
举个例子,对于Heroku,您可以根据环境来更改配置变量,从而更改要加载的设置文件。
就是这样。

heroku config:set DJANGO_SETTINGS_MODULE=mysite.settings.production --app heroku_production

非常方便。

额外奖励

可以在运行服务器时指定 settings,这一点在公式文档中也有提到。

django-admin runserver --settings=mysite.settings.local

祝您拥有美好的Django之旅!

广告
将在 10 秒后关闭
bannerAds