概述
文章目录
- 零、本讲学习目标
- 一、课程导入
- 二、新课讲授
- (一)创建Django项目 - babies
- (二)新建应用 - index
- (三)创建应用 - commodity
- (四)创建应用 - shopper
- (五)项目目录结构图
- 1、babies文件夹
- 2、commodity文件夹
- 3、index文件夹
- 4、media文件夹
- 5、pstatic文件夹
- 6、shopper文件夹
- 7、templates文件夹
- 8、manage.py文件
- (六)项目配置文件 - settings.py
- 1、查看settings.py默认设置
- 2、在配置文件里注册应用
- 3、设置模板信息
- 4、添加中间件
- 5、配置数据库
- 补充内容:使用sqlite3
- (1)使用mysqlclient模块
- (2)使用pymysql模块
- 6、配置静态资源
- 7、配置媒体资源
- 8、两种资源测试
- (1)静态资源测试
- (2)媒体资源测试
- (七)Django内置指令
- 三、课堂小结
- 四、课后作业
- 五、拓展内容
零、本讲学习目标
- 了解项目概念
- 了解APP概念
- 了解模板、路由、中间件、资源、静态资源、媒体资源等概念
- 识记常用的内置指令
一、课程导入
- 软件开发的流程
– 需求分析→设计说明→代码编写→程序测试→软件交付→客户验收→后期维护 - 软件需求分析需要解决什么问题?
– 需求分析阶段解决软件“做什么”的问题 - 软件设计需要解决什么问题?
– 软件设计阶段解决软件“怎么做”的问题
二、新课讲授
-
当我们了解整个项目的开发设计之后,下一步是根据设计内容编写相应的功能代码。开始搭建网站之前,还需要确认使用哪种开发技术完成项目开发,比如网站的前后端是否分离,前后端分别采用哪些框架实现等。本项目采用前后端不分离模式开发,后端使用Django 4.0+MySQL 8.0实现,前端使用layui框架+jQuery实现网页设计。
-
前后端不分离模式要求前端开发人员提供静态的HTML模板,并且HTML模板实现简单的JavaScript脚本功能,如果涉及Ajax异步数据传输,则需要在开发阶段中与后端人员相互调试API接口的数据结构。
(一)创建Django项目 - babies
-
本案例使用PyCharm创建项目和应用方式,大家可自己尝试使用命令行创建方式。
-
项目名称:
babies
-
应用名称:
index
、commodity
、shopper
-
当然也可以选择【New Window】,那样就不会关闭当前已打开的项目
-
创建文件夹
media
、pstatic
,查看目录结构
(二)新建应用 - index
- 在终端窗口下执行命令:
python manage.py startapp index
- 错误提示:配置文件
settings.py
第57
行用到os
模块,但是没有导入 - 打开配置文件
settings.py
,在里面导入os
模块
- 再次执行创建应用(功能模块)的命令:
python manage.py startapp index
- 在
index
模块里有个重要目录migrations
,用来存放数据迁移文件。还有views.py
——视图文件、models.py
——模型文件,后面会创建子路由文件urls.py
。
(三)创建应用 - commodity
- 在终端窗口下执行命令:
python manage.py startapp commodity
(四)创建应用 - 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创建的应用(功能模块),文件夹里含有init.py、 admin.py、apps.py、
models.py
、tests.py和views.py
文件,它主要实现网站的商品列表页和商品详细页。
3、index文件夹
- index是Django创建的应用(功能模块),文件夹含有的文件与应用commodity相同,主要实现网站首页。
4、media文件夹
- media是网站的媒体资源,用于存放商品的
主图
和详细介绍图
。
5、pstatic文件夹
- pstatic是网站的静态资源,用于存放网站的静态资源文件,如CSS、JavaScript、网站界面图片、前端框架(LayUI、BootStrap……)。
6、shopper文件夹
- shopper也是Django创建的应用(功能模块),主要实现网站的
购物车页面
、个人中心页面
、用户登录注册页面
、在线支付功能
等。
7、templates文件夹
- templates用于存放HTML模板文件,即网站的网页文件。
8、manage.py文件
-
manage.py是项目的命令行工具,内置多种方法与项目进行交互。在命令提示符窗口下,将路径切换到项目babies并输入
python manage.py help
,可以查看该工具的指令信息。
-由于文件夹media
,pstatic
是我们自行创建的,templates
是系统自动创建的,还需要在这些文件夹中添加前端提供的HTML静态模板。
-
【网站Web静态模版】下载链接:https://pan.baidu.com/s/14JkxXQbFbh2yAz-0ZM0dwg 提取码:lrqw
-
至此,完成项目babies的整体架构搭建
(1)创建Django项目,并在新建的项目下创建相应的应用(功能模块)
(2)根据前端提供的HTML静态模板,分别创建文件夹media、pstatic,并将HTML静态模板的CSS、JavaScript和HTML文件分别放置在文件夹pstatic和templates
(六)项目配置文件 - settings.py
- 在
babies
目录下的项目配置文件
- 由于文件夹media、pstatic是我们自行创建的,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
则用于网站上线阶段。 -
在开发阶段,
DEBUG
设置为False
,ALLOWED_HOSTS
设置为[]
,只允许本机(localhost或127.0.0.1)访问 -
在上线阶段,
DEBUG
设置为True
,ALLOWED_HOSTS
不能为[]
,否则无法正常运行。如果设置为['*']
,表明网站允许所有用户来访问 -
上述配置属性是Django默认的功能配置,在实际开发中,可根据实际情况适当添加或删除相应的功能配置。
2、在配置文件里注册应用
- 在项目
babies
添加了应用(功能模块)index
、commodity
和shopper
,但Django在运行过程中依然无法识别新增的应用(功能模块),因此还需在Django的配置文件settings.py
里注册。 - 在列表
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
的上下文(模板里面的变量和指令),一般情况下不做任何修改。 -
模板文件夹也可以在应用(功能)里面创建,比如在应用
index
中创建模板文件夹temps
,那么在TEMPLATES
的配置属性DIRS
添加os.path.join(BASE_DIR, 'index/temps')
,其中index/temps
代表应用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
补充内容:使用sqlite3
- sqlite3下载网址:https://www.sqlite.org/download.html
- 解压到指定位置,比如D盘根目录
- 进入sqlite3.exe所在目录
- 说明:在sqlite3里,命令(command)是以
.
打头,没有分号结束符,但是SQL语句(statement)不以.
打头,必须加上分号结束符 - 启动
sqlite3
,创建student.db
数据库 - 执行命令:
sqlite3 student.db
(数据库存在,则打开,不存在,则创建)
- 执行
.databases
命令,查看所有数据库(注意:MySQL是用show databases
来查看所有数据库)
- 在资源浏览器里,看一看是否创建了
student.db
数据库
- 创建
stu
表(SQLite有五种数据类型:null、integer、real、text、blob) - 执行:
create table stu(id integer, name text, gender text, age integer);
- 插入4条记录
sqlite> insert into stu values (1, '李洪文', '男', 18);
sqlite> insert into stu values (2, '肖春红', '女', 19);
sqlite> insert into stu values (3, '唐春刚', '男', 20);
sqlite> insert into stu values (4, '乔红艳', '女', 18);
- 查询全部学生记录,执行
select * from stu;
- 在NaviCat里查看和操作sqlite3数据库
- 由于项目
babies
需要使用MySQL
数据库,因此在配置属性DATABASES
中设置MySQL
的连接信息。在配置数据库信息之前,首先确保本地计算机已安装MySQL
数据库系统,然后再安装MySQL连接模块
,Django可以使用mysqlclient
和pymysql
模块实现MySQL
连接。
(1)使用mysqlclient模块
-
mysqlclient
模块可以使用pip
指令安装,打开命令提示符窗口并输入安装指令pip install mysqlclient
,然后等待模块安装完成即可。
-
完成
mysqlclient
模块的安装后,在项目的配置文件settings.py
中配置MySQL
数据库连接信息
-
在NaviCat里验证数据库连接信息是否正确
-
创建建数据库babies
-
babies
是一个空数据库,接着在PyCharm的Terminal界面下输入Django操作指令python manage.pymigrate
来创建Django内置功能的数据表。因为Django自带了内置功能,如Admin后台系统、Auth用户系统和会话机制等功能,这些功能都需要借助数据表实现,所以该操作指令可以将内置的迁移文件生成数据表,
-
最后在数据库可视化工具Navicat Premium里查看数据库
babies
是否生成相应的10
个数据表
-
使用mysqlclient连接MySQL数据库时,Django对mysqlclient版本有要求,打开Django的源码查看mysqlclient的版本要求,如下图所示:
-
一般情况下,使用pip安装mysqlclient模块都能符合Django的使用要求。如果在开发过程中发现Django提示mysqlclient过低,那么可以对Django的源码进行修改,将上图的if条件判断注释即可。
(2)使用pymysql模块
- 在命令提示符窗口下输入
pip install pymysql
指令并等待安装完成即可
- pymysql模块安装成功后,项目配置文件settings.py的数据库配置信息无须修改,只要在babies文件夹的
__init__.py
中设置数据库连接模块即可。
import pymysql
pymysql.install_as_MySQLdb()
- 若要验证pymysql模块连接MySQL数据库的功能,建议读者先将mysqlclient模块卸载,这样能排除干扰因素,而验证方式与mysqlclient模块连接MySQL的验证方式一致。记得在验证之前,务必将数据库babies的数据表删除。
- 卸载mysqlclient模块
- 删除babies数据库里迁移生成的10个数据表
- 注意删除表的先后次序,有些表要先删除
- 执行迁移命令,生成相应数据表
- 在Navicat里查看babies数据库里生成的10个数据表
- 值得注意的是,如果读者使用的MySQL是8.0以上版本,在Django连接MySQL数据库时会提示
django.db.utils.OperationalError
的错误信息,这是因为MySQL 8.0版本的密码加密方式发生了改变,8.0版本的用户密码采用的是CHA2
加密方式。 - 为了解决这个问题,我们通过SQL语句将8.0版本的加密方式改回原来的加密方式,这样可以解决Django连接MySQL数据库的错误问题。在MySQL的可视化工具中运行以下SQL语句:
# newpassword是已设置的用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;
- Django除了支持PostgreSQL、SQLite3、MySQL和Oracle之外,还支持SQL Server和MongoDB的连接。由于不同的数据库有不同的连接方式,因此此处不过多介绍,本案例主要以MySQL连接为例,若需了解其他数据库的连接方式,可自行搜索相关资料。
6、配置静态资源
- 静态资源的配置分别由配置属性
STATIC_URL
、STATICFILES_DIRS
和STATIC_ROOT
完成,默认情况下,Django只配置了配置属性STATIC_URL
。一个项目在开发过程中肯定需要使用CSS和JavaScript文件,这些静态文件的存放路径主要在配置文件settings.py
设置,Django默认的配置信息如下:`
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/
STATIC_URL = '/static/'
- Django在调试模式(
DEBUG=True
)下只能识别项目应用(App)的static文件夹里面的静态资源
,并且项目应用(App)的static文件夹在创建项目应用的时候不会自动生成,开发者还需要自行在项目应用(App)里面创建static文件夹,如果该文件夹改为其他名字,Django将无法识别;若将static文件夹放在babies的项目目录下,则Django也是无法识别的。
由于STATIC_URL
的特殊性,在开发中会造成诸多不便,比如将静态文件夹存放在项目的根目录或者定义多个静态文件夹等。
- 如果项目中有多个静态资源文件夹,并且这些文件夹
不是在项目应用(App)里面
;或者项目应用(App)的静态文件夹名称不是static
,那么我们只需在配置属性STATICFILES_DIRS
添加对应的文件夹即可。 - 以项目babies为例,若想在网页上正常访问静态资源文件,可以将文件夹
pstatic
写入资源集合STATICFILES_DIRS
,在配置文件settings.py
添加并设置配置属性STATICFILES_DIRS
,该属性以列表或元组的形式表示,设置方式如下:
# 添加并设置配置属性STATICFILES_DIRS
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'pstatic'),)
- 静态资源配置还有
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操作指令collectstatic
来收集所有的静态资源,这些静态资源会保存在STATIC_ROOT
所设置的文件夹里。
7、配置媒体资源
- 一般情况下,STATIC_URL是设置静态文件的路由地址,如CSS样式文件、JavaScript文件以及常用图片等。对于一些
经常变动的资源
,通常将其存放在媒体资源文件夹,如用户头像、商品主图、商品详细介绍图等。 - 媒体资源和静态资源是
可以同时存在的
,而且两者可以独立运行,互不影响,而媒体资源只有配置属性MEDIA_URL
和MEDIA_ROOT
。以项目babies为例,新建的文件夹media
是用来存放媒体资源文件的,在配置文件settings.py分别设置MEDIA_URL
和MEDIA_ROOT
,使Django在运行的时候能够自动识别媒体资源文件夹media
,详细的设置方式如下:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- 配置属性设置后,还需要将
media
文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器中访问该文件夹的文件信息。打开babies
文件夹的urls.py
文件,为媒体文件夹media
添加相应的路由地址,代码如下:
from django.contrib import admin
from django.urls import path, re_path
from django.views.static import serve
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
# 配置媒体资源路由信息
re_path('media/(?P<path>.*)', serve,{'document_root':settings.MEDIA_ROOT}, name='media')
]
-
Django在配置url路由时,使用两种方式,一种是
path
,一种是re_path
,唯一区别是re_path的第1个参数可以使用正则表达式,表达非常复杂的匹配逻辑。此处使用了正则表达式,大家大致理解即可,不必深究。 -
path(
route
,view
, kwargs , name) -
re_path(
regex
,view
, kwargs , name) -
标红的是必选参数,后2个是可选参数。
简单说明path()参数:
- route: 是一个匹配URL的准则(类似正则表达式)。当Django响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则
不会匹配GET和POST参数或域名
。例如,URLconf在处理请求https://www.example.com/myapp
/时,它会尝试匹配myapp/
。处理请求https://www.example.com/myapp
/?page=3 时,也只会尝试匹配myapp/
。 - view: 当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个
HttpRequest
对象作为第一个参数
,被“捕获”的参数以关键字参数的形式传入。 - kwargs: 任意个关键字参数可以作为一个
字典
传递给目标视图函数。 - name: 为你的URL取名能使你在 Django 的
任意地方唯一地引用它
,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个URL模式。
8、两种资源测试
- 启动项目
(1)静态资源测试
- 访问
http://127.0.0.1:8000/static/css/main.css
(2)媒体资源测试
- 访问
http://127.0.0.1:8000/media/imgs/p1.jpg
- 在media目录下创建audio与video目录,拷贝音频和视频到对应的目录
- 访问
http://127.0.0.1:8000/media/audio/Terra.mp3
(会自动播放音频)
访问http://127.0.0.1:8000/media/audio/lzy.mp4
(会自动播放视频)
(七)Django内置指令
-
我们已掌握了Django的项目创建、项目开发调试和基本的功能配置,本节讲述Django内置指令的详细作用,只有了解各个操作指令的功能,才能为我们的项目开发提供巨大的便利和帮助。
-
在PyCharm终端执行命令:
python manage.py help
-
Django的操作指令共有30条
指令 | 说明 |
---|---|
changepassword | 修改内置用户表的用户密码 |
createsupperuser | 为内置用户表创建超级管理员帐号 |
remove_stale_contenttypes | 删除数据库中已不使用的数据表 |
check | 检测整个项目是否存在异常问题 |
compilemessages | 编译语言文件,用于项目的区域语言设置 |
createcachetable | 创建缓存数据表,为内置的缓存机制提供存储功能 |
dbshell | 进入Django配置的数据库,可以执行数据库的SQL语句 |
difettings | 显示当前settings.py的配置信息与默认配置的差异 |
dumpdata | 导出数据表的数据并以JSON格式存储,如python manage.py dumpdata index > > > data.json,这是index的模型所对应的数据导出,并保存在data.json文件中 |
flush | 清空数据表的数据信息 |
inspectdb | 获取项目所有模型的定义过程 |
loaddata | 将数据文件导入数据表,如python manage.py laddadata.json |
makemessages | 创建语言文件,用于项目的区域语言设置 |
makemigrations | 从模型对象创建数据迁移文件并保存在App的migrations文件夹 |
migrate | 根据迁移文件的内容,在数据库里生成相应的数据表 |
sendtestemail | 向指定的收件人发送测试的电子邮件 |
shell | 进入Django的Shell模式,用于调试项目功能 |
showmigrations | 查看当前项目的所有迁移文件 |
sqlflush | 查看清空数据库的SQL语句脚本 |
sqlmigrate | 根据迁移文件内容输出相应的SQL语句 |
sqlsequencereset | 重置数据表递增字段的索引值 |
squashmigrations | 对迁移文件进行压缩处理 |
startapp | 创建项目应用App |
startproject | 创建新的Django项目 |
test | 运行App里面的测试程序 |
testserver | 新建测试数据库并使用该数据库运行项目 |
clearsessions | 清除会话Session数据 |
collectstatic | 收集所有的静态文件 |
findstatic | 查找静态文件的路径信息 |
runserver | 在本地计算机上启动Django项目 |
三、课堂小结
- 按照讲义一步步的搭建项目
- 相关配置一定要仔细,不能有任何错误
- 如果遇到问题,尽力寻找解决办法
四、课后作业
- 在自己电脑上完成此项目的搭建和配置
- 测试静态资源和媒体资源的访问
- 学习正则表达式
五、拓展内容
- Django路由配置
https://www.runoob.com/django/django-routers.html
- 练习使用Django的内置指令
- 正则表达式学习
https://www.runoob.com/regexp/regexp-syntax.html
最后
以上就是无奈砖头为你收集整理的Django讲课笔记06:搭建项目开发环境零、本讲学习目标一、课程导入二、新课讲授三、课堂小结四、课后作业五、拓展内容的全部内容,希望文章能够帮你解决Django讲课笔记06:搭建项目开发环境零、本讲学习目标一、课程导入二、新课讲授三、课堂小结四、课后作业五、拓展内容所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复