Python Django配置文件详解

398 阅读5分钟

我们利用django-admin工具建立了一个Django网站项目,之后可以在项目目录列表中找到配置文件settings.py。在默认情况下,改文件为项目的运行提供了路径,密钥,调试模式,可访问域名权限,应用列表,中间件,根路由,模板列表,数据库访问,用户密码验证检查,国家语言代码,时区,静态地址等配置功能。

1.路径

配置路径文件路径如下。

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

配置文件中的BASE_DIR用于获取项目在计算中的绝对路径,为配置文件中的其他参数所用。在非必要情况下,不要修改该参数值。

2.密钥

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '**i^nr-fchp6#gc_lo!%4@_bv699iz$s=r5a*-wat+b4+zhoy2'

项目在创建时会随机为SECRET_KEY提供密钥值,该参数可以保证用户密码,CSRF,Session等数据被加密,提高效项目运行的安全性。没有特殊理由,无需修改该值。没有设置则Django无法启动。

CSRF:Cross-Site Request Forgery,跨站请求伪造攻击,是一种网站安全漏洞

3.调试模式

DEBUG = True

默认情况下为True,意味着运行项目时若发生代码出错的问题,将在调试界面上直接报告出错信息,以便程序员对代码进行调试。但在正式生产运行环境下,必须把这个值设置为False,否则会产生网站安全问题。

4.可访问域名权限

ALLOWED_HOSTS = []

        可访问域名参数用于限制不同情况下的访问网站许可策略,以增强网站的安全性。

DEBUG=True, ALLOWED_HOSTS=[] :网站只接受以localhost或127.0.0.1的方式访问

DEBUG=False, ALLOWED_HOSTS=[] :网站无法启动

在实际生产环境下部署时,若DEBUG=False, 则ALLOWED_HOSTS的列表中应该指定可以访问的域名范围。

如:['www.example.com'] 表示只允许访问该域名

        指定范围为['.example.com'] 表示允许访问example.com  www.example.com及带子域名的example.com的域名

        指定范围为['*']  表示允许访问所有域名。

5.应用(App)列表

        在一个网站项目中,往往存在不同的,相对独立的业务功能,如后端管理系统Admin,讨论区,博客等,Django将这些相对独立的业务功能称作应用(App)。要使网站启动的同时启动不同的应用,并可以通过浏览器访问这些应用,必须在INSTALLED_APPS列表中注册新的应用名称。下面是创建项目时自动为应用设置的默认名称。

INSTALLED_APPS = [
    'django.contrib.admin',      #内置后端管理系统
    'django.contrib.auth',       #内置的用户认证系统 
    'django.contrib.contenttypes',#内置的模型通用关系框架
    'django.contrib.sessions',      #内置的Session会话功能
    'django.contrib.messages',      #内置的消息提示功能
    'django.contrib.staticfiles',   #内置的查找静态资源路径
]

6.中间件

        Django的中间件是用于处理网页访问请求(Request)和应用响应(Response)的钩子(hook)框架,是一个轻量级的低级别的插件系统。对于其中默认设置的内容,只需要知道其使用方法即可。所有中间件都在MIDDLEWARE列表中进行配置,具体如下

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',    #内置安全机制,保护通信安全
    'django.contrib.sessions.middleware.SessionMiddleware', #使用会话功能,去掉则不使用
    'django.middleware.common.CommonMiddleware',    #规范化URL请求内容
    'django.middleware.csrf.CsrfViewMiddleware',    #增加CSRF攻击保护功能
    'django.contrib.auth.middleware.AuthenticationMiddleware',  #开启用户身份认证系统
    'django.contrib.messages.middleware.MessageMiddleware', #开启Cookie和Session的信息支持
    'django.middleware.clickjacking.XFrameOptionsMiddleware',   #开启防单击劫持攻击安全保护
]

        中间件的配置是有严格的顺序要求,因为有些中间件会依赖其他中间件提供的信息。

比如,AuthenticationMiddleware需要在会话中存储经过身份验证的用户信息,因此他必须在SessionMiddleware后面运行。

        在SessionMiddleware和CommonMiddleware之间可以增加设置本地语言(在中国用汉语显示应用信息)的LocalMiddleware中间件,可配置的中间件及顺序要求可以参考官方网站的要求。

7.根路由

        用与指定项目根路由配置文件地址,默认无需改动

ROOT_URLCONF = 'HelloThreeCoolCats.urls'

8.模板列表

        用于指定项目模板路径,应用模板路径

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

9.数据库访问

        用于设置项目需要访问的数据库接口参数,默认设置是访问自带的SQLite3数据库系统 

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

        访问不同数据库系统需要通过ENGINE提供不同的数据库引擎

Django提供了PostgreSQL,MySQL,SQLite3,Oracle这4中数据库引擎

'django.db.backends.postgresql' 

'django.db.backends.mysql'

...

10.用户密码验证检查

        当用户输入密码后,对AUTH_PASSWORD_VALIDATORS进行参数配置可以为密码的安全提供不同等级的验证功能。若不配置则接受所有密码。

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },#检查输入的密码和用户名属性集合之间的相似性
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },#检查密码是否符合最小长度,最少需要9个字符
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },#检查密码是否在常用密码列表中
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },#检查密码是否完全由数字组成
]

11.国家语言代码

        用于设置项目的显示语言,默认值是‘en-us’(美式英语),可以设置为‘zh-hans’,表示显示中文。

LANGUAGE_CODE = 'en-us'

 12.时区

        用于设置时区,默认为‘UTC’,指世界标准时间。也可设置为‘Asia/Shanghai’,表示中国上海时间

 

TIME_ZONE = 'UTC'

13.静态地址

        用于为CSS,JS,图片,视频,音频等固定不变的文件(静态资源文件)提供固定存放地址,方便Django的不同应用自动访问。

        这里约定在各应用下建立名称为static (不能为其他名称)的子目录,用于存放静态文件。

STATIC_URL = '/static/'

【完】

        如果这篇文章对你有用的话麻烦点赞收藏 感谢!!