Django区分生产环境和开发环境

789 阅读2分钟

Django区分生产环境和开发环境


前言

Django项目上线我会使用Jenkins+docker自动化部署,需要更改settings.py中的mysql和redis配置用于docker部署。所以必须区分生产和开发这两种环境

注意 如果你想省事,直接在git仓库创建两个分支

  • master分支是开发环境
  • devop分支是生产环境用于自动化部署

1. 简单了解两种环境

  • 开发环境 我们平时自己写代码搭建的环境,此时项目在开发阶段,并未上线
  • 生产环境 项目上线,需要部署到Linux服务器上

2. 为什么要区分

(1)生产环境的配置与开发环境的配置需要隔离开,开发环境DEBUG=True,生产环境为False

(2)生产环境和开发环境使用的配置不一样,例如分别使用MySQL/Sqlite数据库

示例:

# 开发环境中的数据库配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
# 生产环境中的数据库配置(使用docker)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lishui_gdxt',
        'USER': 'username',
        'PASSWORD': 'password',
        # host为db,是因为docker-compose.yml文件中的服务名为db,docker会自动把db解析成具体地址
        'HOST': 'db',
        'PORT': '3306',
    }
}

3.区分两种环境

将原来项目中的setting.py变成settings文件夹底下的base.py

settings文件夹具体分为

  • base.py 基础配置,开发环境和生产环境相同的配置
  • prod.py 生产环境配置
  • dev.py 开发环境配置
image.png image.png

prod.py为例,先从base.py中把配置导入进来,之后可以覆盖base中定义的那些配置

from .base import *

DEBUG = False

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lishui_gdxt',
        'USER': 'username',
        'PASSWORD': 'password',
        # host为db,是因为docker-compose.yml文件中的服务名为db,docker会自动把db解析成具体地址
        'HOST': 'db',
        'PORT': '3306',
    }
}

4.启动Django

方法一: 更改pycharm中的运行配置,更改DJANGO_SETTINGS_MODULE的模块名为你定义的settings文件名,例如 gdxt.settings.prod

image.png

方法二: 使用终端启动,在python manage.py runserver 命令后添加参数settings

python manage.py runserver 192.168.100.7:8085 --settings=gdxt.settings.prod

如果不加settings参数,django会使用你在manage.py中默认定义的gdxt.settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gdxt.settings')

5.settings文件的正确引用

如果想用settings.py里面的变量,直接导入django.conf.settings这个对象。它会找DJANGO_SETTINGS_MODULE对应的模块。

from django.conf import settings

print(setting.DEBUG) # 如果--settings=gdxt.settings.prod,那么结果是False

本地开发时,要在pycharm设置中的语言和框架配置好settings,避免使用settings模块时,pycharm没有代码提示

image.png

踩坑提示

python manage.py collectstatic 报错 Unknown command: 'collectstatic' 这是因为如果settings分文件,就找不到django.contrib.staticfiles'这个app

image.png

所以正确写法是 python manage.py collectstatic --settings=config.settings.baseord