Django开发应用程序不容易,先得把配置弄好

Django开发应用程序的时候需要进行一定的配置,常用的数据库、系统语言、静态文件配置信息外还有更多配置项。这些配置信息都存放在配置文件中,Django的配置文件是一个Python模块,所有配置项都是模块级别的变量。

不能够出现语法错误

可以使用Python语法动态指定配置值

可以从其他配置文件中引入变量

使用时必须通过环境变量DJANGO_SETTINGS_MODULE指定当前工程所使用的配置文件,默认情况下,在中指定配置文件。

#!/usr/bin/env python
import os
import sys

if __name__ == '__main__':
    ('DJANGO_SETTINGS_MODULE', '')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line()

使用WSGI部署Django应用程序,需要在中指定配置文件

"""
WSGI config for website project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see

"""

import os

from django.core.wsgi import get_wsgi_application

('DJANGO_SETTINGS_MODULE', '')

application = get_wsgi_application()

如果配置文件中缺少对某个配置的设置,则会使用Django的默认值,每一个配置项Django都给出了默认值,默认配置文件路径是django/conf/中
Django按照下面先后顺序加载配置文件

  1. 加载
  2. 加载工程指定的配置文件,使用工程指定的配置重写默认值

引用Django配置信息

from django.conf import settings

!由于配置文件是在Django编译时加载的,所以不能在运行时对系统配置进行修改。

数据库
DATABASES用于指定网站所使用的数据库类型以及连接方式,它是一个嵌套的字典对像,字典的Key是数据库别名,字典的值是数据库配置信息。
Django支持包括PostgreSQL、MySQL、SQLite、Oracle等几种主流数据库。

默认配置

DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': (BASE_DIR, ''),
    }
}
or
DATABASES = {
    'default': {
        'ENGINE': '',
        'NAME': "数据库名",
        'USER': "数据库用户名",
        'PASSWORD': "数据库密码",
        'HOST': "数据库主机地址",
        'PORT': "数据库端口号",
    }
}
  • ENGINE:数据库连接引擎,针对不同的数据库
  • NAME:数据库名
  • USER:数据库的用户名
  • PASSWORD:数据库用户密码
  • HOST:数据库所在主机名
  • PORT:数据库开放端口号

数据库路由配置
数据库路由配置,当执行数据库操作时,Django会根据路由配置选择恰当的数据库执行操作。默认值是一个空列表:[], 列表元素是一个实现了特殊路由方法的Python类的路径。
使用数据库路由,必须创建数据库路由类,该类必须实现以下方法:

  • db_for_read(model, **hints):指定对model进行读操作的数据库。
  • db_for_write(model, **hints):指定对model进行写操作的数据库。
  • allow_relation(obj, obj2, **hints): 如果允许obj1和obj2之间存在关联则返回True,如果禁止存在关联则返回False,如果对这两之间没有限制则返回None。该方法仅用于验证两个对象间是否可以存在外键关联或者多对多关联。
  • allow_migrate(db, app_label, model_name=None, **hints): 该方法用于确定数据库是否可以进行migration操作,第一个参数db是数据库的别名。方法返回True则表示允许进行migration操作,返回False则表示不允许进行migration操作,返回None表示没有特殊规定。参数app_label是进行migration操作的应用程序名。
THE END