资讯详情

Django 使用不同配置文件的三种方式

1、背景简要

在开发过程中,环境分离是一种非常常见的情况,一般分为开发环境和生产环境。还有一些开发环境、日常环境和生产环境。

当环境更多时,我们当然不想在编写代码时每次更改配置。更好的方法是编写多个配置文件,并通过环境变量决定使用哪个配置文件。

Django 默认为使用项目目录 settings.py 作为配置文件,我们将根据开发和生产环境进行讨论 Django 中都有什么方式来动态使用配置文件。

写在前面:

本例的 Django 项目名称为 base_django_api 就是使用 Django-admin创建的工程名称

2、通过shell命令切换配置文件

首先,写两个完全独立的。 settings 配置文件在这里命名 dev_settings.py prod_settings.py 请注意,这两个配置文件可以直接复制到项目目录中替换 settings.py 的。

如下图示: 在这里插入图片描述

然后在运营项目前使用 shell 命令直接替换原项目 settings.py

例如:

cp ./config/prod_settings.py ./base_django_api/settings.py # 生产环境使用此命令 cp ./config/prod_settings.py ./base_django_api/settings.py # 开发环境使用此命令 

这种方法主要用于应用 docker 在容器中部署服务,不使用 docker 当然,你可以写一个 shell 脚本来控制

另一个缺点是配置项冗余过多,每次更改都不方便

3.通过设置环境变量切换配置文件

例如,在运行服务之前,我们首先定义了一个环境变量,称为它 CURRANT_ENV

判断当前是开发环境还是生产环境的环境变量。

例如:当前CURRANT_ENV=dev开发环境,CURRANT_ENV=prod时间是生产环境

切换配置有两种方法:

1.直接在项目配置文件中 settings.py 根据不同的环境变量使用不同的配置

示例:

# settings.py import os, sys, datetime, random from datetime import timedelta  CURRENT_ENV = os.getenv('CURRENT_ENV', 'dev') # 获取当前环境,默认为开发环境  # 公共配置 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) SECRET_KEY = '0b($)a_$n$!grvsj!pob$5z4(q u3fo_)aoz!g)3^=pk@7g770sdfgertgsdf'  # 在开发环境时,使用开发配置 if CURRENT_ENV == 'dev':     DEBUG = True     # 开发数据库     DATABASES = { 
                 'default': { 
                     'ENGINE': 'django.db.backends.mysql',             'NAME': 'base-api',             'USER': 'root',             'PASSWORD': '123456',             'HOST': '127.0.0.1',             'PORT': '3306',
            'OPTIONS': { 
        
                "init_command": "SET foreign_key_checks = 0;",
                'charset': 'utf8mb4',
                'sql_mode': 'traditional'
            }
        }
    }
else:
    DEBUG = False
    # 生产数据库
    DATABASES = { 
        
        'default': { 
        
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'base-api',
            'USER': 'root',
            'PASSWORD': 'asghs#$zasdg%#',
            'HOST': '127.0.0.1',
            'PORT': '3706',
            'OPTIONS': { 
        
                "init_command": "SET foreign_key_checks = 0;",
                'charset': 'utf8mb4',
                'sql_mode': 'traditional'
            }
        }
    }

这样做的缺点是会导致项目配置文件变的不好维护

下面就有一个更好一点的方式

2、升级版,定义不同的配置文件,在项目配置文件中根据环境变量导入不同的配置

示例:

先定义不同的配置文件

# dev_settings.py
DEBUG = True
# 开发数据库
DATABASES = { 
        
    'default': { 
        
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'base-api',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': { 
        
            "init_command": "SET foreign_key_checks = 0;",
            'charset': 'utf8mb4',
            'sql_mode': 'traditional'
        }
    }
}
# prod_settings.py
DEBUG = False
# 生产数据库
DATABASES = { 
        
    'default': { 
        
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'base-api',
        'USER': 'root',
        'PASSWORD': 'asghs#$zasdg%#',
        'HOST': '127.0.0.1',
        'PORT': '3706',
        'OPTIONS': { 
        
            "init_command": "SET foreign_key_checks = 0;",
            'charset': 'utf8mb4',
            'sql_mode': 'traditional'
        }
    }
}

在项目配置文件中根据环境变量导入不同的配置

# settings.py
import os, sys, datetime, random
from datetime import timedelta

CURRENT_ENV = os.getenv('CURRENT_ENV', 'dev') # 获取当前环境,默认为开发环境

# 公共配置
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '0b($)a_$n$!grvsj!pob$5z4(q+u3fo_)aoz!g)3^=pk@7g770sdfgertgsdf'

# 如果是开发环境时,使用开发配置
if CURRENT_ENV == 'dev':
    from config.dev_settings import *
else:
    from config.prod_settings import *

标签: aoz1014aic集成电路

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台