如何在Django的不同设置上正确运行服务器?

cha*_*ilk 7 python django

我有一个基本的django rest API。我只想出于组织目的将一些设置分别用于开发和生产。我还只是在学习有关分离环境的知识。我已经阅读了几本书,但似乎无法按照我想要的方式来使其工作。

层次结构如下所示:

- djangorest
  - api
    - __init__.py
    - models.py
    - views.py
    - urls.py
    - etc..
  - djangorest
    - __init__.py
    - settings.py
    - urls.py
    - wsgi.py
Run Code Online (Sandbox Code Playgroud)

现在,当我运行服务器时,我做了一个简单的操作:

python3 manage.py runserver
Run Code Online (Sandbox Code Playgroud)

该命令从settings.py中读取设置,并适当地运行它,但是我一直在寻找如何将设置分为prod vs dev的方法,它无法正常工作。

我希望能够拥有:

commonsettings.py
dev.py
prod.py
Run Code Online (Sandbox Code Playgroud)

在常规设置中,开发人员和生产人员都将拥有任何东西。我试过跑步:

python3 manage.py runserver --settings=settings.dev
Run Code Online (Sandbox Code Playgroud)

但这给我一个错误,说没有名为“设置”的模块。

请帮忙。谢谢!

C.K*_*.K. 9

例如我在开发设置中打开 SQL 日志

  1. 我的文件结构:
    创建设置文件夹和 mv original settings.py 到 settings/defaults.py 在此处输入图片说明

  2. init .py 中加载默认值

# proj/proj/settings/__init__.py

from .defaults import *
Run Code Online (Sandbox Code Playgroud)
  1. 编辑 dev.py
# proj/proj/settings/dev.py

from .defaults import *
DEBUG = True

# print sql to the console
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'DEBUG',
        }
    },
}

Run Code Online (Sandbox Code Playgroud)
  1. 在 python 环境中运行
./manage.py runserver --settings proj.settings.dev
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Django 2.1.7 | 苹果电脑


Ton*_*dis 8

创建一个名为 config 的文件夹

config/
    commonsettings.py
    dev.py
    prod.py
Run Code Online (Sandbox Code Playgroud)

确保在 dev.py 和 prod.py 中像这样从 commonsettings.py 导入所有内容:

from .commonsettings import * 
Run Code Online (Sandbox Code Playgroud)

那么如果你想运行 dev.py 设置:

python manage.py runserver --settings=config.dev
Run Code Online (Sandbox Code Playgroud)

如果你想运行 prod.py:

python manage.py runserver --settings=config.prod
Run Code Online (Sandbox Code Playgroud)

笔记:

对于更具可读性的文件,许多开发人员将他们的设置文件称为:local.py(用于本地设置)production.py(用于生产设置)和 base.py(两者的通用设置)

我个人将我的设置文件放在:

config/
    settings/
        base.py
        local.py
        production.py
        test.py (For tests)
Run Code Online (Sandbox Code Playgroud)


Iyv*_*ose 2

将所有常用配置放入commonsettings中。py文件。

将以下行添加到设置目录中的__init__.py文件中

from commonsettings import *
Run Code Online (Sandbox Code Playgroud)

这使得commonsettings文件中的每个配置在设置文件夹中的所有其他文件中可用

启动你的服务器

python3 manage.py runserver --settings=djangorest.settings.dev
Run Code Online (Sandbox Code Playgroud)