Django讲课笔记06:搭建项目开发环境
Posted howard2005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django讲课笔记06:搭建项目开发环境相关的知识,希望对你有一定的参考价值。
零、本讲学习目标
- 了解项目概念
- 了解APP概念
- 了解模板、路由、中间件、资源、静态资源、媒体资源等概念
- 识记常用的内置指令
一、课程导入
- 软件开发的流程
– 需求分析→设计说明→代码编写→程序测试→软件交付→客户验收→后期维护 - 软件需求分析需要解决什么问题?
– 需求分析阶段解决软件“做什么”的问题 - 软件设计需要解决什么问题?
– 软件设计阶段解决软件“怎么做”的问题
二、新课讲授
当我们了解整个项目的开发设计之后,下一步是根据设计内容编写相应的功能代码。开始搭建网站之前,还需要确认使用哪种开发技术完成项目开发,比如网站的前后端是否分离,前后端分别采用哪些框架实现等。本项目采用前后端不分离模式开发,后端使用Django 3.0+mysql 8.0实现,前端使用layui框架+jQuery实现网页设计。
前后端不分离模式要求前端开发人员提供静态的html模板,并且HTML模板实现简单的javascript脚本功能,如果涉及Ajax异步数据传输,则需要在开发阶段中与后端人员相互调试API接口的数据结构。
(一)创建Django项目 - babies
- 本案例使用PyCharm创建项目和应用方式,大家可自己尝试使用命令行创建方式。
- 项目名称:babies
- APP应用名称:index、commodity、shopper
- 当然也可以选择【New Window】,那样就不会关闭当前已打开的项目
- 创建文件夹media、pstatic和templates,目录结构如下图所示:
(二)新建APP - index
- 在终端窗口下执行命令
python manage.py startapp index
- 错误提示:配置文件settings.py里没有导入os
- 在配置文件settings.py里导入os
- 再次执行创建APP的命令:
python manage.py startapp index
(三)创建APP - commodity
- 在终端窗口下执行命令
python manage.py startapp commodity
(四)创建APP - shopper
- 在终端窗口下执行命令
python manage.py startapp shopper
(五)项目目录结构图
整个项目共有7个文件夹和1个文件,每个文件夹和文件的功能说明如下:
1、babies文件夹
babies文件夹与项目名相同,该文件夹下含有文件init .py、asgi.py、settings.py、urls.py和 wsgi.py
2、commodity文件夹
commodity是Django创建的项目应用(App),文件夹里含有init.py、 admin.py、apps.py、models.py、tests.py和views.py文件,它主要实现网站的商品列表页和商品详细页。
3、index文件夹
index是Django创建的项目应用(App),文件夹含有的文件与项目应用(App)commodity相同,它主要实现网站首页。
4、media文件夹
media是网站的媒体资源,用于存放商品的主图和详细介绍图。
5、pstatic文件夹
pstatic是网站的静态资源,用于存放网站的静态资源文件,如css、JavaScript和网站界面图片。
6、shopper文件夹
shopper也是Django创建的项目应用(App),它主要实现网站的购物车页面、个人中心页面、用户登录注册页面、在线支付功能等。
7、templates文件夹
templates用于存放HTML模板文件,即网站的网页文件。
8、manage.py文件
manage.py是项目的命令行工具,内置多种方法与项目进行交互。在命令提示符窗口下,将路径切换到项目babys并输入python manage.py help,可以查看该工具的指令信息。
由于文件夹media,pstatic和templates是我们自行创建的,因此还需要在这些文件夹中添加前端提供的HTML静态模板,详细的添加说明如下:
至此,完成项目babies的整体架构搭建,分为两个步骤:
- 创建Django项目,并在新建的项目下创建相应的项目应用(App)。
- 根据前端提供的HTML静态模板,分别创建文件夹media、pstatic和templates,并将HTML静态模板的CSS、JavaScript和HTML文件分别放置在文件夹pstatic和templates。
(六)项目配置文件 - settings.py
由于文件夹media、pstatic和templates是我们自行创建的,Django在运行中无法识别这些文件夹的具体作用,因此,我们还需要在Django的配置文件settings.py中添加这些文件夹,使Django在运行中能识别这些文件夹的作用。
1、查看settings.py默认设置
import os
from pathlib import Path
# 项目路径
BASE_DIR = Path(__file__).resolve().parent.parent
# 密钥配置
SECRET_KEY = 'django-insecure-72fj#720j9s29=+4uiq@8)ppbd=x_240fvre#=u1!i@7idcgrz'
# 调试模式
DEBUG = True
# 域名访问权限
ALLOWED_HOSTS = []
# App列表
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
# 中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 路由入口设置
ROOT_URLCONF = 'babies.urls'
# 模板配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, '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配置
WSGI_APPLICATION = 'babies.wsgi.application'
# 数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 内置Auth认证的功能配置
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 = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# 静态资源配置
STATIC_URL = '/static/'
上述代码列出了13个配置信息,每个配置信息的说明如下:
(1)项目路径BASE_DIR:主要通过os模块读取当前项目在计算机系统的具体路径,该代码在创建项目时自动生成,一般情况下无须修改。
(2)密钥配置SECRET_KEY:这是一个随机值,在项目创建的时候自动生成,一般情况下无须修改。主要用于重要数据的加密处理,提高项目的安全性,避免遭到攻击者恶意破坏。密钥主要用于用户密码、CSRF机制和会话Session等数据加密。
- 用户密码:Django内置一套Auth认证系统,该系统具有用户认证和存储用户信息等功能,在创建用户的时候,将用户密码通过密钥进行加密处理,保证用户的安全性。
- CSRF机制:该机制主要用于表单提交,防止窃取网站的用户信息来制造恶意请求。
- 会话Session:Session的信息存放在Cookie中,以一串随机的字符串表示,用于标识当前访问网站的用户身份,记录相关用户信息。
(3)调试模式DEBUG:该值为布尔类型。如果在开发调试阶段,那么应设置为True,在开发调试过程中会自动检测代码是否发生更改,根据检测结果执行是否刷新重启系统。如果项目部署上线,那么应将其改为False,否则会泄漏项目的相关信息。
(4)域名访问权限ALLOWED_HOSTS:设置可访问的域名,默认值为空列表。当DEBUG为True并且ALLOWED_HOSTS为空列表时,项目只允许以localhost或127.0.0.1在浏览器上访问。当DEBUG为False时,ALLOWED_HOSTS为必填项,否则程序无法启动,如果想允许所有域名访问,可设置ALLOW_HOSTS = [’*’]。
(5)App列表INSTALLED_APPS:告诉Django有哪些App。在项目创建时已有admin、auth和sessions等配置信息,这些都是Django内置的应用功能,各个功能说明如下:
- admin:内置的后台管理系统。
- auth:内置的用户认证系统。
- contenttypes:记录项目中所有model元数据(Django的ORM框架)。
- sessions:Session会话功能,用于标识当前访问网站的用户身份,记录相关用户信息。
- messages:消息提示功能。
- staticfiles:查找静态资源路径。
(6)中间件MIDDLEWARE:这是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。
(7)路由入口设置ROOT_URLCONF:告诉Django从哪个文件查找整个项目的路由信息(路由信息即我们定义的网址信息),默认值是与项目同名的文件夹的urls.py文件,即babies文件夹的urls.py。
(8)模板配置TEMPLATES:主要配置模板的解析引擎、模板的存放路径地址以及Django内置功能的模板使用配置信息。
(9)WSGI配置WSGI_APPLICATION:告诉Django如何查找WSGI文件,并从WSGI文件启动并运行Django系统服务,默认值是与项目同名的文件夹的wsgi.py文件,即babys文件夹的wsgi.py。
(10)数据库配置DATABASES:配置数据的连接信息,如连接数据库的模块、数据库名称、数据库的账号密码等,默认连接sqlite数据库。
(11)内置Auth认证的功能配置AUTH_PASSWORD_VALIDATORS:主要实现Django的Auth认证系统的内置功能。
(12)国际化与本地化配置:包含配置属性LANGUAGE_CODE、TIME_ZONE、USE_I18N、USE_L10N、USE_TZ,主要实现网站的语言设置、不同时区的时间设置等。
(13)静态资源配置STATIC_URL:设置静态文件的路径信息。
在网站开发阶段中,我们经常对配置文件settings.py的INSTALLED_APPS
、MIDDLEWARE
、TEMPLATES
、DATABASES
和STATIC_URL
进行配置,从而完成网站的开发过程,而配置属性DEBUG
和ALLOWED_HOSTS
则用于网站上线阶段。
上述配置属性是Django默认的功能配置,在实际开发中,可根据实际情况适当添加或删除相应的功能配置。
2、在配置文件里添加项目应用
- 我们在项目babys添加了项目应用(App)
index
、commodity
和shopper
,但Django在运行过程中依然无法识别新增的项目应用(App),因此还需在Django的配置文件settings.py
添加我们新增的项目应用(App)。在App列表INSTALLED_APPS
分别添加index
、commodity
和shopper
,添加信息如下:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'index',
'commodity',
'shopper'
]
3、设置模板信息
- 在Web开发中,模板是一种较为特殊的HTML文档。这个HTML文档嵌入了一些能够让Django识别的变量和指令,然后由Django的模板引擎解析这些变量和指令,生成完整的HTML网页并返回给用户浏览。模板是Django里面的MTV框架模式的T部分,配置模板路径是为了告诉Django在解析模板时,如何找到模板所在的位置。
- 一般情况下,项目的根目录文件夹templates通常存放共用的模板文件,能为各个App的模板文件调用,这个模式符合代码重复使用的原则。我们已在项目babies创建了文件夹templates,它是用来存放Django模板文件的,在配置文件settings.py的配置属性TEMPLATES添加文件夹templates,配置信息如下:
- 如果是命令行创建的项目,由于没有templates文件夹,该配置文件中也无相关配置,需要做以下红框部分的配置,如果是使用PyCharm向导生成的项目,该配置已经完成,不用再手动配置。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, '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',
],
},
},
]
模板配置以列表格式表示,每个元素具有不同的含义,其含义说明如下:
- BACKEND:定义模板引擎,用于识别模板里面的变量和指令。内置的模板引擎有
Django Templates
和jinja2.Jinja2
,每个模板引擎都有自己的变量和指令语法。 - DIRS:设置模板所在的路径,告诉Django在哪个地方查找模板的位置,默认为
空列表
。 - APP_DIRS:是否在App里查找模板文件。
- OPTIONS:用于填充在
RequestContext
的上下文(模板里面的变量和指令),一般情况下不做任何修改。
模板文件夹也可以在项目应用(App)里面创建,比如在项目应用index中创建模板文件夹temps
,那么在TEMPLATES
的配置属性DIRS
添加os.path.join(BASE_DIR, 'index/temp')
,其中index/temp代表项目应用index
的模板文件夹temps
;并且配置属性APP_DIRS
必须设置为True
,否则Django无法从项目应用中查找模板文件。
4、添加中间件
- 中间件(Middleware)是一个用来处理Django请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。
- 当用户在网站中进行某个操作时,这个过程是用户向网站发送HTTP请求(Request),而网站会根据用户的操作返回相关的网页内容,这个过程称为响应处理(Response)。从请求到响应的过程中,当Django接收到用户的请求时,首先经过中间件处理请求信息,执行相关的处理,然后将处理结果返回给用户。中间件的执行流程如下图所示。
- 从上图中能清晰地看到,中间件的作用是处理用户请求信息和返回响应内容。开发者可以根据自己的开发需求
自定义中间件
,只要将自定义的中间件添加到配置属性MIDDLEWARE
中即可激活。 - 一般情况下,Django默认的中间件配置均可满足大部分的开发需求。我们在项目的MIDDLEWARE中添加
LocaleMiddleware
中间件,使得Django内置的功能支持中文显示,代码如下:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # 添加中间件LocaleMiddleware
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
配置属性MIDDLEWARE
的数据格式为列表类型,每个中间件的设置顺序是固定的,如果随意变更中间件很容易导致程序异常。每个中间件的说明如下:
SecurityMiddleware
:内置的安全机制,保护用户与网站的通信安全。SessionMiddleware
:会话Session功能。LocaleMiddleware
:国际化和本地化功能。CommonMiddleware
:处理请求信息,规范化请求内容。CsrfViewMiddleware
:开启CSRF防护功能。AuthenticationMiddleware
:开启内置的用户认证系统。MessageMiddleware
:开启内置的信息提示功能。XFrameOptionsMiddleware
:防止恶意程序单击劫持。
5、配置数据库
默认情况下,Django支持使用PostgreSQL
、MySQL
、Sqlite3
和Oracle
数据库,如果要使用其他的数据库,如MSSQL
或Redis
等,需要自行安装第三方插件
。配置属性DATABASES是设置项目所使用的数据库信息,不同的数据库需要设置不同的数据库引擎,数据库引擎用于实现项目与数据库的连接,Django提供了4种数据库引擎:
数据库引擎用于实现项目与数据库的连接,Django提供了4种数据库引擎:
- ‘django.db.backends.
postgresql
’ - ‘django.db.backends.
mysql
’ - ‘django.db.backends.
sqlite3
’ - ‘django.db.backends.
oracle
’
在创建项目的时候,Django已默认使用Sqlite3数据库,配置文件settings.py的配置信息如下所示:
项目创建之后,如果没有修改配置属性DATABASES,当启动并运行Django时,Django会自动在项目的目录下创建数据库文件db.sqlite3,如下图所示:
由于项目babys需要使用MySQL数据库,因此在配置属性DATABASES中设置MySQL的连接信息。在配置数据库信息之前,首先确保本地计算机已安装MySQL数据库系统,然后再安装MySQL的连接模块,Django可以使用mysqlclient
和pymysql
模块实现MySQL连接。
(1)使用mysqlclient模块
- mysqlclient模块可以使用pip指令安装,打开命令提示符窗口并输入安装指令
pip install mysqlclient
,然后等待模板安装完成即可。
- 如果使用pip在线安装mysqlclient的过程中出现错误,还可以选择
whl
文件安装。在浏览器中访问https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient并下载与Python版本相匹配的mysqlclient文件。
- 本机安装的Python是64位的,因此选择
mysqlclient-1.4.6-cp38-cp38-win_amd64.whl
下载
- 我们将mysqlclient文件下载保存在D盘,然后打开命令提示符窗口,使用pip完成whl文件的安装,如下所示:
pip install D:\\mysqlclient-1.4.6-cp38-cp38-win_amd64.whl
(2)使用pymysql模块
三、课堂小结
四、课后作业
五、拓展内容
以上是关于Django讲课笔记06:搭建项目开发环境的主要内容,如果未能解决你的问题,请参考以下文章