Django详解 - settings.py设置文件

# 以下配置文件包含项目名称、SECRET_KEY,如果需要直接应用需要将项目名称MyDjango和SECRET_KEY替换成自己的项目名称。
# 引入模块
import os
from pathlib import Path
"""
项目路径BASE_DIR:主要通过os模块读取当前项目在计算机系统的具体路径,该代码创建项目时自动生成,一般情况下无须修改。
在项目中的构建路径如下:BASE_DIR / 'subdir'
"""
BASE_DIR = Path(__file__).resolve().parent.parent

"""
密钥配置SECRET_KEY:这是一个随机值,在项目创建的时候自动生成,一般情况下无须修改。主要用于重要数据的加密处理,提高项目的安全性,避免遭到攻击者的恶意破坏。密钥主要用于用户密码、CSRF机制和绘画Session等数据加密。
● 用户密码:Django内置一套Auth认证系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性。
● CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。
● 会话Session:Session的信息存放在Cookie中,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。
安全警告:将生产中使用的密钥保密!
"""
SECRET_KEY = '**************************************************'

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

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

"""
APP列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和sessions等配置信息,这些都是Django内置的应用功能,各个功能说明如下。
● admin:内置的后台管理系统
● auth:内置的用户认证系统
● contenttypes:记录项目中所有model元数据(Django的ORM框架)。
● sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
● messages:消息提示功能。
● staticfiles:查找静态资源路径。
如果在项目中创建了App,就必须在App列表INSTALLED_APPS添加App名称。
"""
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 添加项目应用index
    'index',
    # 添加项目应用user
    'user',
]

"""
中间件MIDDLEWARE:
中间件(Middleware)是一个来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。
当用户在网站中进行某个操作时,这个过程是用户想网站发送HTTP请求(Request);而网站会根据用户的操作返回相关的网页内容,这个过程称为响应处理(Response)。从请求到响应的过程中,当Django接收到用户请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。
配置属性MIDDLEWARE的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件,就很容易导致程序异常。每个中间件的说明如下:
● SecurityMiddleware:内置的安全机制,保护用户与网站的通信安全。
● SessionMiddleware:会话Session功能。
● LocaleMiddleware:国际化和本地化功能。
● CommonMiddleware:处理请求信息,规范化请求内容。
● CsrfViewMiddleware:开启CSRF防护功能。
● AuthenticationMiddleware:开启内置的用户认证系统。
● MessageMiddleware:开启内置的信息提示功能。
● XFrameOptionsMiddleware:防止恶意程序单机劫持。
一般情况下,Django默认的中间件配置均可满足大部分的开发需求。我们在项目的MIDDLEWARE中添加LocaleMiddleware中间件,使得Django内置的功能支持中文显示,代码如下:
"""
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 添加LocaleMiddleware中间件,使得Django内置的功能支持中文显示
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

"""
Django会从配置文件settings.py读取属性ROOT_URLCONF的值,默认值为MyDjango.urls,器代表MyDjango文件夹的urls.py文件,然后根据ROOT_URLCONF的值来生成整个项目的路由列表。
"""
ROOT_URLCONF = 'MyDjango.urls'

"""
模板配置TEMPLATES:
在Web开发中,模板是一种较为特殊的HTML文档,这个HTML文档嵌入了一些能够让Django识别的变量和指令,然后由Django的模板引擎解析这些变量和指令,生成完整的HTML网页并返回给用户浏览。模板是Django里面的MTV框架模式的T部分,配置模板路径是告诉Django在解析模板时,如何找到模板所在的位置。
模板配置是以列表格式呈现的,每个元素有不同的含义,其含义说明如下:
● BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有Django Templates和jinja2.Jinja2,每个模板引擎都有自己的变量和指令语法。
● DIRS:设置模板所在路径,告诉Django在哪个地方查找模板位置,默认为空列表
● APP_DIRS:是否在App里查找模板文件。
● OPTIONS:用于填充在RequestContext的上下文(模板里面的变量和指令),一般情况下不做任何修改。
模板配置通常配置DIRS的属性即可,在项目的根目录和index下分别创建templates文件夹,并在文件夹下分别创建文件index.html和app_index.html
"""
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 注册根目录和index的templates文件夹
        'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR,'index/templates')]
        ,
        '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',
            ],
        },
    },
]


WSGI_APPLICATION = 'MyDjango.wsgi.application'


"""
数据库配置DATABASES:
Sqlite3数据库配置:
项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用语嵌入式系统开发,而且占用的资源非常少。Sqlite3数据库配置信息如下:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}
MySQL数据库:
如果把上述的链接信息改为MySQL数据库,首先安装MySQL链接模块,由于mysqldb不支持Python3,因此Django2.0以上版本不再使用mysqldb作为MySQL的链接模块,而可选择pymysql或mysqlclient模块,在使用上并没有太大的差距。
在配置MySQL之前,需要安装pymysql模块,这里以pip安装方法为例:
打开命令提示符窗口并输入安装命令:pip install pymysql
在MyDjango目录下的__init__.py下添加:
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()
完成pymysql模块的安装后,在项目的配置文件settings.py中配置MySQL数据库链接信息,代码如下:
DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'django_db',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT':'3306',
    },
}
多个数据库的连接方式:
在一个项目里可能需要使用多个数据库才能满足开发需求,特别对于数据量过大的系统,单个数据库存储的数据越多会使服务器负载越大,因此会将数据库划分成多个数据库服务器共同存储,若Django想录用这些数据开发功能系统,则需要对各个数据库进行连接。
从Django单个数据库连接信息可以看到,配置属性DATABASES的属性是以字典的格式标识的,字典里的每一对键值代表连接某一个数据库。因此,我们再配置属性DATABASES里设置多对键值对即可实现多个数据库连接,实现代码如下:
"""
DATABASES = {
    # 存储Django的默认数据库,必须要有
    'default': {
        'ENGINE':'django.db.backends.mysql',
        'NAME':'django_db',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT':'3306',
    },
    # 额外连接MySQL数据库
    'MyDjango':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'myDjango_db',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'localhost',
        'PORT':'3306',
    },
    # 额外连接Sqlite3数据库
    'MySqlite3': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# 设置语言
LANGUAGE_CODE = 'zh-hans'
# 设置时区
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True

"""
资源路由STATIC_URL:
资源文件配置分为静态资源和媒体资源。静态资源的配置方式由配置属性STATIC_URL、STATICFILES_DIRS和STATIC_ROOT进行设置;媒体资源的配置方式由配置属性MEDIA_URL和MEDIA_ROOT决定。
静态资源指的是网站中不会改变的文件。在一般的应用程序中,静态资源包括CSS文件、JavaScript文件以及图片等资源文件。
一个项目在开发过程中肯定需要使用CSS和JS文件,这些静态文件的存放主要由配置文件settings.py设置,Django默认配置信息如下:
STATIC_URL = '/static/'
上述配置是设置静态资源的路由地址,其作用是同个浏览器访问Django的静态资源。默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源。当项目启动时,Django会从项目应用App里面查找相关的资源文件,查找功能主要由App列表INSTALLED_APPS的staticfiles实现。例如:在index的App中创建static文件夹并在文件夹中放置*.jpg可以在浏览器上通过 http:\\localhost:8000/static/*.jpg 访问。
通过上述例子说明,若资源路由STATIC_URL的值为/static/,则浏览器访问静态资源的网站必须为static,否则无法访问,并且Django在调试模式(DEBUG=True)下只能识别App目录下的static文件夹。
"""
STATIC_URL = '/static/'

"""
资源集合STATICFILES_DIRS:
由于STATIC_URL的特殊性,在开发中会造成诸多不便,比如讲静态文件夹存放在项目的根目录以及定义多个静态文件夹等。以MyDjango为例,若想在网页上正常访问图片*.jpg和*.png,可以将根目录的static文件夹和index的Mystatic文件夹写入资源集合STATOCFILES_DIRS。
在配置文件settings.py中设置STATICFILES_DIRS属性。该属性以列表的形式表示,设置方式如下:
"""
STATICFILES_DIRS = [
    # 设置根目录的静态资源文件夹static
    os.path.join(BASE_DIR,'static'),
    # 设置App(index)的静态资源文件夹Mystatic
    os.path.join(BASE_DIR,'index/Mystatic'),
]
"""
例如:
当前项目目录下有个static文件夹,文件夹中有个1.jpg文件
当前index的App下有个Mystatic文件夹,文件夹中有个1.png文件
均可通过 http:\\localhost:8000/static/1.jpg 和 http:\\localhost:8000/static/1.png 访问。
"""

"""
资源部署STATIC_ROOT:
静态资源配置还有STATIC_ROOT,其作用是在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要收集整个项目的静态资源并存放在一个新的文件夹,然后由该文件夹与服务器质检构建映射关系。STATIC_ROOT配置如下:
"""
STATIC_ROOT = os.path.join(BASE_DIR,'Allstatic')
"""
当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务,此时整个项目处于开发阶段,因此无须使用STATIC_ROOT。当配置属性DEBUG设为False的时候,意味着项目进入生产环境,Django不在提供静态文件袋里服务,次数需要再项目的配置文件中设置STATIC_ROOT。
设置STATIC_ROOT需要使用Django操作指令coolectstatic来手机静态资源,这些静态资源都会保存在STATIC_ROOT所设置的文件夹里。
"""

"""
媒体资源MEDIA:
一般情况下,STATIC_URL是设置静态文件的路由地址,如CSS样式文件、JavaScript文件以及常用图片等。对于一些经常变动的资源,通常将其存放在媒体资源文件夹,如用户头像、歌曲文件等。
媒体资源和静态资源是可以同时存在的,而且两者独立运行,互不影响,而媒体资源只有配置属性MEDIA_URL和MEDIA_ROOT。以MyDjango为例,在MyDjango的根目录下创建media文件夹并存放图片monkey.jpg。
然后再配置文件settings.py例设置配置属性MEDIA_URL和MEDIA_ROOT,MEDIA_URL用于设置媒体资源的路由地址,MEDIA_ROOT用于获取media文件夹在计算机系统的完整路径信息,如下所示:
"""
# 设置媒体路由地址信息
MEDIA_URL = '/media/'
# 获取media文件夹的完整路径信息
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
"""
配置属性设置后,还需要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器上访问该文件夹的文件信息。打开MyDjango文件夹里的urls.py文件,为媒体文件夹media添加相应的路由地址,代码如下:
from django.contrib import admin
from django.urls import path,re_path
# 导入项目应用index
from index.views import index
# 配置媒体文件夹media
from django.views.static import serve
from django.conf import settings

urlpatterns = [
    # 只想内置Admin后台系统的路由文件sites.py
    path('admin/', admin.site.urls),
    # 配置媒体文件的路由地址
    re_path('media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT},name='media'),
]
"""

 

头像

作者:

发表评论

邮箱地址不会被公开。

Demon_运维笔记