1 需求分析
整个网站分为五大模块,分别是用户信息模块、图书信息模块、图书荐购模块、评论模块和图书馆模块。
用户信息模块
用户信息模块包括用户注册、用户登录、显示用户信息、用户密码修改。
- 注册时要输入用户名、密码。注册信息要求用户名必须唯一。
- 用户登录时,如果用户名和密码输入有误,必须提示相应的错误信息。
- 用户登录后,能够查看自己的用户信息和图书荐购信息,还能够修改部分用户信息和用户头像。能够修改的用户信息包括姓名、学号/工号、手机号、微信号、QQ号码、邮箱及所属院校。
- 允许用户修改密码,修改密码可以有两种方式:一种是提供旧密码来修改密码;另一种是忘记密码,采用邮箱验证来修改密码。
图书信息模块
图书信息模块包括图书信息的维护,图书概要信息的分页显示,图书信息的模糊查询和某个图书的详细信息。
- 图书信息的维护,包括对图书的增加、修改和删除操作,利用Django的后台完成。
- 图书概要信息的分页显示,包括图书信息的封面、书名、作者、出版社、查看详情以及荐购操作。
- 图书信息的模糊查询,查询的信息包括书名、作者和出版社,查询结果同概要信息,也要实现分页功能。
- 某个图书的详细信息,要显示书名、作者、出版社、ISBN、图书分类(一级分类和二级分类)、出版日期、图书包装、图书版次、图书页数、荐购次数、图书开本、图书京东价、图书原价以及图书的摘要信息。
图书荐购模块
图书荐购模块包括荐购图书、已荐购图书的展示、取消荐购、荐购反馈。
- 荐购图书,读者在概要信息页面和详情页面都要能荐购图书,荐购图书可选荐购理由,有荐购理由的图书馆可以优先处理。
- 已荐购图书的展示,在图书的详细页面展示该书已被荐购的次数,在读者个人信息页面展示该读者已荐购的图书列表。
- 读者能够取消已荐购的图书,取消荐购后该书的荐购次数相应减少。
- 荐购反馈,图书馆可以对被荐购图书进行处理,包括已接受荐购、正在购买中、图书已到馆、图书已上架和未采纳荐购,并给出未采纳的理由。
评论模块
评论模块包括图书的评论、修改、删除和回复评论、评论点赞和取消、管理员回评、屏蔽或删除评论信息。
- 读者对图书的评论按评论时间排序或按热度排序,读者可以修改或删除自己的评论。
- 读者可以对评论点赞或取消,评论的热度排序按点赞数量来排列,点赞数多的排前列。
- 系统管理员可以对评论进行回复,屏蔽或删除某条评论或者某个人的所有评论。
图书馆模块
图书馆模块包括图书馆的资料信息、图书馆审核读者、图书馆对荐购图书的反馈以及图书馆对评论的回应。
- 图书馆的资料信息应包括图书馆的名称、地址、联系人和联系方式。
- 图书馆需要审核读者的身份信息,是否是该馆读者,审核通过的才能向该馆荐购图书。
- 图书馆可以对被荐购图书进行处理,包括已接受荐购、正在购买中、图书已到馆、图书已上架和未采纳荐购,并给出未采纳的理由。
- 图书馆管理员可以对评论进行回复,屏蔽或删除某条评论或者某个人的所有评论。
2 数据库设计
图书信息表book_info
图书信息表是网站的核心数据,设置网站的数据结构时,应以图书信息为核心数据,逐步向外扩展相关联的数据信息。将图书信息的数据表命名为book_info,图书信息表book_info的数据结构如下表所示:
表字段 | 字段类型 | 含义 |
---|---|---|
book_id | Int类型 | 主键 |
book_sku_id | Int类型 | 商品的sku |
book_name | Varchar类型,长度为150 | 图书名称 |
book_author | Varchar类型,长度为100 | 图书著者 |
book_pic | Varchar类型,长度为150 | 图书封面的文件路径 |
book_size | Varchar类型,长度为5 | 图书开本 |
book_isbn | Varchar类型,长度为20 | 图书ISBN号 |
book_press | Varchar类型,长度为50 | 出版社 |
book_pub_date | Varchar类型,长度为20 | 图书出版日期 |
book_pack | Varchar类型,长度为2 | 图书包装 |
book_edition | Int类型 | 图书版次 |
book_page | Int类型 | 图书页数 |
book_price | Float类型,长度为8 | 图书定价 |
book_substract | Text类型 | 图书摘要(简介) |
cata_id | Int类型 | 外键,连接图书分类表 |
图书类别表catagory
图书信息中还有一个图书分类的信息,需要单独放在图书类别表catagory中。图书信息和图书分类的关系是:一本图书对应一个类别,一个类别可以对应多本图书。因此,图书信息表和图书分类表是一对多的关系,需要在图书信息表中建立指向图书分类的外键。
表字段 | 字段类型 | 含义 |
---|---|---|
cata_id | Int类型 | 主键 |
cata_name | Varchar类型,长度50 | 类别的名称 |
parent_cata | Int类型 | 外键,连接当前表,类别的上一级分类的id |
图书类别表中的parent_cata字段关联该分类的上一级分类的cata_id,例如“小说-言情小说|科幻小说”这样的分类在数据库中应该是这样表示的:
cata_id | cata_name | parent_cata |
---|---|---|
1 | 小说 | None |
2 | 言情小说 | 1 |
3 | 科幻小说 | 1 |
4 | 文学 | None |
5 | 纪实文学 | 4 |
上表中parent_cata为None的代表是顶级分类,比如小说、文学,言情小说和科幻小说的父类id是1,因此上一级分类是小说,而纪实文学的父类id是4,因此上一级分类是文学。这样我们在保存图书信息的分类时,只需要保存最底层的类别cata_id,然后寻级遍历上去就能获取该图书所在的所有类别。
用户信息表user_info
用户信息表user_info提供用户信息,用户信息表由Django内置模型User扩展而成,表结构如下:
表字段 | 字段类型 | 含义 |
---|---|---|
user_id | Int类型 | 主键 |
password | Varchar类型,长度为128 | 用户密码 |
is_superuser | Int类型,长度为1 | 超级用户 |
username | Varchar类型,长度为150 | 用户名 |
first_name | Varchar类型,长度为30 | 用户的姓 |
last_name | Varchar类型,长度为150 | 用户的名 |
Varchar类型,长度为150 | 邮箱地址 | |
identity_number | Int类型 | 身份号(工号或学号) |
is_staff | Int类型,长度为1 | 登录Admin权限 |
is_active | Int类型,长度为1 | 用户的激活状态 |
Varchar类型,长度为20 | 用户的QQ号码 | |
mobile | Varchar类型,长度为11 | 用户的手机号码 |
lib_id | Varchar类型,长度为50 | 外键,关联图书馆信息表 |
荐购信息表rec_info
在网站需求中,还涉及到读者荐购和荐购反馈,因此需要荐购信息表rec_info。
表字段 | 字段类型 | 含义 |
---|---|---|
rec_id | Int类型 | 主键 |
rec_reason | Varcharl型,长度为150 | 荐购原因,可选 |
rec_feedback | Varchar类型,长度为150 | 荐购反馈,默认为待处理,随着处理进程,更改反馈的信息,包括已接受荐购、正在购买中、图书已到馆、图书已上架和未采纳荐购,并给出未采纳的理由等。 |
user_id | Int型 | 外键,关联用户信息表user_info |
book_id | Int型 | 外键,关联图书信息表book_info |
图书评论表comment
读者可以对图书发起点评,同时其他读者也可以对点评进行点赞或回复,图书点评表comment结构如下:
表字段 | 字段类型 | 含义 |
---|---|---|
comment_id | Int类型 | 主键 |
comment_type | Int类型,长度为1 | 区分该条评论是直接评论还是回复评论 |
comment_text | Varchar类型,长度为500 | 点评内容 |
comment_date | Varchar类型,长度为50 | 点评日期 |
from_user_id | Int类型 | 外键,关联用户信息表,表示评论人的id |
to_user_id | Int类型 | 外键,关联用户信息表,表示回复目标的id |
book_id | Int类型 | 外键,关联图书信息表 |
图书馆信息表lib_info
此外,还需要图书馆的信息表lib_info。
表字段 | 字段类型 | 含义 |
---|---|---|
lib_id | Int类型 | 主键 |
lib_name | Varchar类型,长度50 | 图书馆的名称 |
lib_address | Varchar类型,长度150 | 图书馆的地址 |
lib_contact | Varchar类型,长度20 | 图书馆的联系人 |
lib_phone | Varchar类型,长度20 | 图书馆的联系电话 |
lib_email | Varchar类型,长度150 | 图书馆的电子邮箱 |
3 项目创建与配置
首先打开cmd命令行,cd到放置项目的所在文件夹,使用如下命令创建项目JiangXiongGo。
django-admin startproject JiangXiongGo
然后创建在项目目录下分别创建book、user、recommend、library和comment应用:
E:\MyProject\JiangXiongGo>python manage.py startapp book
E:\MyProject\JiangXiongGo>python manage.py startapp user
E:\MyProject\JiangXiongGo>python manage.py startapp recommend
E:\MyProject\JiangXiongGo>python manage.py startapp library
E:\MyProject\JiangXiongGo>python manage.py startapp comment
创建好项目和应用后,我们在项目根目录和每个应用的目录下分别创建文件夹templates和 static,两者分别存放模板文件和静态资源文件。在每个应用下创建一个空白的urls.py
文件。搭建好的项目目录如下:
项目目录结构搭建好之后,就是对项目进行相关的配置,配置主要在配置文件settings.py中完成。
#添加新增的应用项目book、user、recommend、library和comment
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'book',
'user',
'recommend',
'library',
'comment',
]
#添加中间件LocaleMiddleware
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
#使用中文
'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',
]
#设置模板路径
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates'),
os.path.join(BASE_DIR,'book/templates'),
os.path.join(BASE_DIR,'user/templates'),
os.path.join(BASE_DIR,'recommend/templates'),
os.path.join(BASE_DIR,'library/templates'),
os.path.join(BASE_DIR,'comment/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',
],
},
},
]
#设置数据库连接信息,使用mysql数据库,项目使用的数据库为jiangxiongGo_db,需要提前在数据库中创建好。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'jiangxiongGo_db',
'USER':'root',
'PASSWORD':'123456',
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
以上是项目的常规配置。配置好项目以后,我们可以在终端输入命令python manage.py runserver
,然后在浏览器中输入http://127.0.0.1:8000,查看项目是否正常运行。