我们利用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/'