Django项目配置文件拆分(含Pycharm控制台启动报错解决方法)

Django项目配置文件拆分

为了便于演示,本文将会新建一个名为SettingsDemo的全新项目

本文基于Pycharm 做配置演示

1. 新建 settings 包

在项目的管理目录下新建一个包,取名为settings

2. 在settings下新建不同环境的配置文件

settings包下面新建几个配置文件:

  1. base.py --公共配置
  2. dev.py – 开发环境配置
  3. prod.py --生产环境配置(也可以直接在服务器上新建,不建议加入git管理)

3. 修改配置文件内容

1.base.py

base.py文件是公共配置信息,所以我们把公共部分都放在这里面,其他配置文件都要导入这个配置文件。

常见的INSTALLED_APPS, MIDDLEWARE, TEMPLATES, 以及时区,语言等配置都放在这里面。基本就是把原有的settings.py内容复制到这里面,然后删除各个环境不一样的配置项即可。

注意事项:

由于我们将配置文件的位置移动到了更深一层路径,所以我们需要调整 BASE_DIR 的路径,调整如下:

# 原配置
# BASE_DIR = Path(__file__).resolve().parent.parent

# 修改后(后面多一个.parent),基础路径需要再往上一层
BASE_DIR = Path(__file__).resolve().parent.parent.parent

2. dev.py

dev.py文件存放开发环境等信息,最常见的在这里面配置数据库,调试模式,添加debug-toolbar调试应用等信息,注意,必须在最上面先导入base.py的配置信息。

开发环境常用配置项示例如下:

from .base import *

# 开发环境开启调试模式
DEBUG = True

# 开发环境允许所有主机连接
ALLOWED_HOSTS = ['*']

# 开发环境使用sqlite3数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 开发环境需要使用debug-toolbar调试工具
INSTALLED_APPS += ['debug_toolbar']

# 开发环境媒体文件存放路径,保存在项目下
MEDIA_ROOT = BASE_DIR / "media"

# 下面可以继续添加其他配置,如静态存放文件路径等

3. prod.py

prod.py存放生成环境的配置信息,一般不会加入版本管理内,配置项与dev.py的内容差不多

常用配置内容如下:

from .base import *

# 生产环境一定要关闭调试模式
DEBUG = False

# 生产环境只允许特定的服务器连接,所有数据都是通过这些服务器的nginx转发
ALLOWED_HOSTS = ['xx.xx.xx.xx', 'xx.xx.xx.xx']

# 生产环境使用mysql数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '192.168.1.123',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123456',
        'NAME': 'demo',
    }
}

# 生产环境的媒体文件一般不会放在项目路径下,防止项目更新或者其他原因删除用户上传的文件
MEDIA_ROOT = '/var/project/media'

# 下面可以继续添加其他配置,如静态存放文件路径等

4. 修改项目默认配置文件

按照上面的内容修改之后,此时项目是无法正常启动的,我们还需要修改做一些处理,告诉程序在哪加载配置文件。

方法1. 运行时指定配置文件位置

此方法是在启动时指定配置文件,生产环境一般使用这种

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

方法2. 修改 wsgi.py 文件,指定新的配置文件位置

开发时一般为了方便不会指定运行环境,因此需要修改默认的配置文件位置

# 原配置,这里指定默认的settings文件位置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SettingsDemo.settings')

# 修改后, 默认使用开发环境配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SettingsDemo.settings.dev')

使用python manage.py runserver启动系统时,默认是加载项目主目录下面的SettingsDemo.settings模块,由于我们新建了一个同名的包,当我们删除原来的settings.py之后,会出现报错,因为SettingsDemo.settings模块里面缺少相关必须的配置项,所以我们要在settings包下面的__init__.py里面导入默认环境,使程序加载模块时能正确获取到配置。

SettingsDemo/settings/__init__.py中添加如下内容

from .dev import *    # 默认加载开发环境,因为生产环境一般会在运行时指定配置文件

之后就可以使用命令python manage.py runserver正常启动项目了

5. 处理 Python 控制台 打开时的报错

报错情况

上面修改默认settings文件位置之后,在Pycharm中打开Pycharm控制台会出现下面的报错

Traceback (most recent call last):
  File "<input>", line 6, in <module>
  File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
    self._setup(name)
  File "D:\myhub\SettingsDemo\venv\lib\site-packages\django\conf\__init__.py", line 67, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

同时,工具中的运行 Manage.py 任务 功能也会无法使用(带有自动补全实在是太好用了,尤其是自定义的管理命令也能提示,再也不用担心记不住长长的命令了)

解决办法

打开Pycharm设置,依次选择 语言和框架 -> Django ,在右侧的窗口里面修改设置项的值,直接点击右侧的文件夹图标,选择你要使用的配置文件即可,演示这里选择开发环境的dev.py

应用之后,再次打开 Python 控制台 功能就不会出现报错了, 而且可以正常使用工具里面的运行 Manage.py 任务功能

6. 无法使用Pycharm右上角三角形运行项目

经过上面的一系列修改之后,有可能**(注意:是有可能)**无法通过Pycharm右上角的绿色小三角启动项目,那是因为默认的settings配置被清除了,就像下面这样

这里只需要将settings模块位置补全即可, 注意是 .的形式

DJANGO_SETTINGS_MODULE=SettingsDemo.settings.dev

修改完成后点击应用,然后就可以正常启动项目了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值