XieJava的博客

任何实际的软件项目中都要经过开发、测试、然后上生产的阶段,在开发、测试的过程中往往会要频繁的切换开发、测试、生产等不同的环境。每个环境的配置有可能不一样,本文介绍如何实现django项目配置环境变量实现开发、测试、生产灵活便捷的切换。

一、为什么要区分开发 (dev)、测试 (test) 和生产 (prod) 环境

在Django项目中区分开发、测试和生产环境是非常重要的,这主要是因为不同环境在多个方面存在显著差异。 ● 开发环境:通常配置为易于开发和调试,比如开启调试模式(DEBUG = True),这样可以提供更详细的错误信息和页面跟踪,方便开发者定位问题。同时,开发环境可能使用本地数据库或内存数据库,以便快速启动和测试。 ● 测试环境:配置为模拟生产环境,但用于自动化测试。测试环境需要确保测试的独立性和一致性,以便准确地评估应用程序在类似生产条件下的表现。测试环境通常使用与生产环境相同或相似的数据库设置,但数据是测试专用的。 ● 生产环境:配置为高性能、高可用性和高安全性。关闭调试模式,优化数据库连接和缓存策略,确保应用程序能够处理大量并发请求和保障数据的安全。 通过区分这些环境,开发者可以更有效地管理django项目,确保每个环境都能满足其特定的需求,从而提高开发效率、保障数据安全和提升用户体验。

二、django项目如何通过配置实现环境配置的区分

对于django项目实现开发(dev)、测试(test)和生产(prod)环境的配置分离可以通过使用不同的设置文件实现。 下面,我们以一个实例来介绍在django的项目如何通过使用不同的设置文件的方式区分不同的环境。

1、针对不同的环境创建不同的设置文件settings.py

针对不同的环境创建不同的设置文件,如开发环境settings_dev.py ,测试环境setting_test.py,正式生产环境使用默认的setting.py,对于共性的配置可以抽取到base.py中,其他的设置文件可以继承base.py中的配置,只有实现各个环境特有的设置就可以了。 创建设置文件的目录结构如下图所示。

根据不同的环境创建不同的配置文件

2、在设置文件中根据需要进行配置区分

典型的,如开发环境settings_dev.py用的本地数据库并开启debug模式、测试环境setting_test.py用sqlite3数据库开启debug模式。 注意:其他的设置文件要继承base.py中的配置,需要加入from .base import * 参考配置如下: setting_test.py

from .base import *

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'test_db.sqlite3'),
    }
}

setting_dev.py

from .base import *

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1', 'localhost','ishareblog.com']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ishareblog_test',
        'USER': 'ishareblog',
        'PASSWORD': 'yourpassword',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        # 1、取消外键约束,否则多对多模型迁移报django.db.utils.IntegrityError: (1215, 'Cannot add foreign key constraint');
        # 2、解决字符串4个字节的utf8编码的字符报错的问题
        'OPTIONS': {
            'charset': 'utf8mb4',"init_command": "SET foreign_key_checks = 0;",
        }
    }
}

3、根据不同的环境运行使用不同的设置文件

不同的环境有了不同的设置文件后,就可以在不同的环境运行和使用配置文件。 如生产环境使用的wsgi启动的服务,可以在wsgi.py文件中指定使用生产环境的配置文件

wsgi中使用生产环境配置文件

在开发环境中使用manage.py启动服务的,可以修改manage.py将设置文件改为setting_dev 开发环境在manage文件中使用开发设置文件

也可以通过命令行指定设置文件 python manage.py runserver --settings=ishareblog.settings_dev 如果时通过IDE启动,可以在IDE中指定使用的环境设置文件。 如下图所示:

在IDE中指定环境设置文件

如要使用测试环境的设置文件,可以配置成ishareblog.settings_test,或通过命令行指定设置文件 python manage.py runserver --settings=ishareblog.settings_test

至此,本文详细的介绍了通过不同的设置文件来区分配置开发、测试、生产环境的配置及如何根据不同的环境使用不同的设置文件。解决不同环境去频繁修改settings.py环境设置的问题。


博客地址:http://xiejava.ishareread.com/


“fullbug”微信公众号

关注:微信公众号,一起学习成长!