# 以下配置文件包含项目名称、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'), ] """