如何配置Django进行简单的开发和部署?

111 python django

我倾向于在进行Django 开发时使用SQLite,但在实时服务器上经常需要更强大的东西(例如MySQL/PostgreSQL).不变的是,Django设置还有其他变化:不同的记录位置/强度,媒体路径等.

如何管理所有这些更改以使部署成为一个简单的自动化流程?

Jim*_*Jim 85

更新: django-configurations已经发布,对于大多数人而言,这可能比手动更好.

如果您更愿意手动操作,我的早期答案仍然适用:

我有多个设置文件.

  • settings_local.py - 特定于主机的配置,例如数据库名称,文件路径等.
  • settings_development.py- 用于开发的配置,例如DEBUG = True.
  • settings_production.py- 用于生产的配置,例如SERVER_EMAIL.

我将这些与settings.py首先导入的文件settings_local.py以及其他两个文件中的一个绑在一起.它决定通过两个设置加载哪个settings_local.py- DEVELOPMENT_HOSTSPRODUCTION_HOSTS. settings.py调用platform.node()查找正在运行的计算机的主机名,然后在列表中查找该主机名,并根据找到主机名的列表加载第二个设置文件.

这样,您唯一需要担心的是settings_local.py使用特定于主机的配置保持文件最新,并自动处理其他所有内容.

在这里查看一个示例.

  • 如果升级(开发)和生产在同一台机器上怎么办?platform.node()返回相同的内容. (2认同)
  • 示例链接已关闭. (2认同)

Gab*_*oss 26

就个人而言,我使用单个settings.py进行项目,我只是让它查找它所在的主机名(我的开发机器的主机名以"gabriel"开头,所以我只有这个:

import socket
if socket.gethostname().startswith('gabriel'):
    LIVEHOST = False
else: 
    LIVEHOST = True
Run Code Online (Sandbox Code Playgroud)

然后在其他部分我有这样的事情:

if LIVEHOST:
    DEBUG = False
    PREPEND_WWW = True
    MEDIA_URL = 'http://static1.grsites.com/'
else:
    DEBUG = True
    PREPEND_WWW = False
    MEDIA_URL = 'http://localhost:8000/static/'
Run Code Online (Sandbox Code Playgroud)

等等.可读性稍差,但它工作正常,节省了不得不兼顾多个设置文件.


Dmi*_*nko 23

在settings.py结束时,我有以下内容:

try:
    from settings_local import *
except ImportError:
    pass
Run Code Online (Sandbox Code Playgroud)

这样,如果我想覆盖默认设置,我需要将settings_local.py放在settings.py旁边.

  • 这有点危险,因为如果`settings_local`中的拼写错误导致`ImportError`,这个`除了`将会静默地吞下它. (4认同)

Joh*_*kin 11

我有两个文件.settings_base.py其中包含常用/默认设置,并检入源控件.每个部署都有一个单独的settings.py,from settings_base import *在开始时执行,然后根据需要覆盖.

  • 如果`settings_local.py`从设置import*`执行此操作,它可以覆盖`settings.py`中的值.(`settings_local.py`文件必须在`settings.py`的末尾导入). (3认同)

And*_*ard 7

我找到的最简单的方法是:

1)使用默认的settings.py进行本地开发,2)创建一个以:开头的production-settings.py:

import os
from settings import *
Run Code Online (Sandbox Code Playgroud)

然后只需覆盖生产中不同的设置:

DEBUG = False
TEMPLATE_DEBUG = DEBUG


DATABASES = {
    'default': {
           ....
    }
}
Run Code Online (Sandbox Code Playgroud)