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

2024-05-28 19:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本的django restapi。我想把dev和prod的一些设置分开,只是为了便于组织。我也在学习分离环境。我读过一些东西,但我似乎不能让它按我想要的方式运行。在

层次结构如下所示:

- djangorest
  - api
    - __init__.py
    - models.py
    - views.py
    - urls.py
    - etc..
  - djangorest
    - __init__.py
    - settings.py
    - urls.py
    - wsgi.py

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

^{pr2}$

该命令从中读取设置设置.py并适当地运行它,但是我已经研究过如何将设置分为prod和dev,但是它不能正常工作。在

我希望能够:

commonsettings.py
dev.py
prod.py

在commonsettings中,它只包含dev和prod中的任何内容。我试过运行:

python3 manage.py runserver --settings=settings.dev

但是它给了我一个错误,说没有名为'setting'的模块。在

请帮忙。谢谢您!在


Tags: djangopydevapirestapisettings环境层次结构
3条回答

例如,我在dev settings中打开SQL日志

  1. 我的文件结构:
    创建设置文件夹和mv原始文件设置.py到设置/默认值.py enter image description here

  2. init.py中加载默认值

# proj/proj/settings/__init__.py

from .defaults import *
  1. 编辑开发人员在
^{pr2}$
  1. 在python环境中运行
./manage.py runserver --settings proj.settings.dev

enter image description here

Django 2.1.7 Mac

此解决方案不需要额外的参数,也不必跨环境替换/删除文件。在

制造设置.py决定加载哪个文件

假设您的Django项目名为MyDjangoApp。在

在Django项目的根目录中创建config/目录,并为每个环境创建一个.py文件,例如:

config/
  local.py
  dev.py
  prod.py
MyDjangoApp/
  settings.py

环境的数量没有逻辑上的限制,我只添加了我通常拥有的三个环境。在

然后,在MyDjangoApp/settings.py中,我们可以添加逻辑来选择要加载的设置文件。在

^{pr2}$

请注意:此逻辑根据运行Django应用程序的服务器的主机名选择要加载的设置文件。这只是一个例子-你可以实现任何其他适合你的逻辑。在

只改变需要的

好消息是,设置.py仍然可以保存绝大多数设置,config/中的文件只需要包含在不同环境中更改的设置,例如:

  • 数据库
  • 调试
  • 管理员
  • 测井

避免--命令行中的设置

可以将Django设置设置为shell环境变量,如下所示:

export DJANGO_SETTINGS_MODULE=MyDjangoApp.settings

最好的方法是在.sh文件中;通常我在Django项目的根目录下创建一个名为env.sh文件的文件,并在激活virtualenv之后运行它(一次)。在

文件/环境sh内容

#!/usr/bin/env bash

export DJANGO_SETTINGS_MODULE=MyDjangoApp.settings

要从终端(Bash或Windows上的git scm Bash)运行它:

. env.sh 

然后可以使用./manage.py runserver在任何地方启动Django服务器。在

参考号:https://code.djangoproject.com/wiki/SplitSettings#DevelopmentMachineDependantSettingsConfiguration

创建一个名为config的文件夹

config/
    commonsettings.py
    dev.py
    prod.py

确保开发人员以及生产周期你从普通设置.py像这样:

^{pr2}$

如果你想运行开发人员设置:

python manage.py runserver --settings=config.dev

如果你想跑生产周期公司名称:

python manage.py runserver --settings=config.prod

注:

对于更具可读性的文件,许多开发人员将其设置文件称为:本地.py(用于本地设置)生产.py(用于生产设置)和基准.py(两者的共同设置)

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

config/
    settings/
        base.py
        local.py
        production.py
        test.py (For tests)

相关问题 更多 >

    热门问题