玩转Django 2.0
上QQ阅读APP看书,第一时间看更新

2.1 基本配置信息

一个简单的项目必须具备的基本配置信息有:项目路径、密钥配置、域名访问权限、App列表和中间件。以MyDjango项目为例,settings.py的基本配置如下:

     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__)))
     # 密钥配置
     # SECURITY WARNING: keep the secret key used in production secret!
     SECRET_KEY = '@p_m^!ha=$6m$9#m%gobzo&b0^g2obt4teod84xs6=f%$4a66x'
     # SECURITY WARNING: don't run with debug turned on in production!
     # 调试模式
     DEBUG =True
     # 域名访问权限
     ALLOWED_HOSTS = []
     # App列表
     # Application definition
     INSTALLED_APPS = [
         'django.contrib.admin',
         'django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.messages',
         'django.contrib.staticfiles',
     ]

上述代码列出了项目路径BASE_DIR、密钥配置SECRET_KEY、调试模式DEBUG、域名访问权限ALLOWED_HOSTS和App列表INSTALLED_APPS,各个配置说明如下。

项目路径BASE_DIR:主要通过os模块读取当前项目在系统的具体路径,该代码在创建项目时自动生成,一般情况下无须修改。

密钥配置SECRET_KEY:是一个随机值,在项目创建的时候自动生成,一般情况下无须修改。主要用于重要数据的加密处理,提高系统的安全性,避免遭到攻击者恶意破坏。密钥主要用于用户密码、CSRF机制和会话Session等数据加密。

• 用户密码:Django内置一套用户管理系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性。

• CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。

• 会话Session:Session的信息存放在Cookies,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。

调试模式DEBUG:该值为布尔类型。如果在开发调试阶段应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统。如果项目部署上线,应将其改为False,否则会泄漏系统的相关信息。

域名访问权限ALLOWED_HOSTS:设置可访问的域名,默认值为空。当DEBUG为True并且ALLOWED_HOSTS为空时,项目只允许以localhost或127.0.0.1在浏览器上访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS=['*']。

App列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和session等配置信息,这些都是Django内置的应用功能,各个功能说明如下。

• admin:内置的后台管理系统。

• auth:内置的用户认证系统。

• contenttypes:记录项目中所有model元数据(Django的ORM框架)。

• sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。

• messages:消息提示功能。

• staticfiles:查找静态资源路径。

如果在项目创建了App,必须在App列表INSTALLED_APPS添加App名称。将MyDjango项目已创建的App添加到App列表,代码如下:

     INSTALLED_APPS = [
         'django.contrib.admin',
         'django.contrib.auth',
         'django.contrib.contenttypes',
         'django.contrib.sessions',
         'django.contrib.messages',
         'django.contrib.staticfiles',
         'index',
         'user',
     ]