Django图书荐购云平台开发与实践 -1需求分析、数据库设计和项目的创建与配置

1 需求分析


整个网站分为五大模块,分别是用户信息模块、图书信息模块、图书荐购模块、评论模块和图书馆模块。

用户信息模块

用户信息模块包括用户注册、用户登录、显示用户信息、用户密码修改。

  1. 注册时要输入用户名、密码。注册信息要求用户名必须唯一。
  2. 用户登录时,如果用户名和密码输入有误,必须提示相应的错误信息。
  3. 用户登录后,能够查看自己的用户信息和图书荐购信息,还能够修改部分用户信息和用户头像。能够修改的用户信息包括姓名、学号/工号、手机号、微信号、QQ号码、邮箱及所属院校。
  4. 允许用户修改密码,修改密码可以有两种方式:一种是提供旧密码来修改密码;另一种是忘记密码,采用邮箱验证来修改密码。

图书信息模块

图书信息模块包括图书信息的维护,图书概要信息的分页显示,图书信息的模糊查询和某个图书的详细信息。

  1. 图书信息的维护,包括对图书的增加、修改和删除操作,利用Django的后台完成。
  2. 图书概要信息的分页显示,包括图书信息的封面、书名、作者、出版社、查看详情以及荐购操作。
  3. 图书信息的模糊查询,查询的信息包括书名、作者和出版社,查询结果同概要信息,也要实现分页功能。
  4. 某个图书的详细信息,要显示书名、作者、出版社、ISBN、图书分类(一级分类和二级分类)、出版日期、图书包装、图书版次、图书页数、荐购次数、图书开本、图书京东价、图书原价以及图书的摘要信息。

图书荐购模块

图书荐购模块包括荐购图书、已荐购图书的展示、取消荐购、荐购反馈。

  1. 荐购图书,读者在概要信息页面和详情页面都要能荐购图书,荐购图书可选荐购理由,有荐购理由的图书馆可以优先处理。
  2. 已荐购图书的展示,在图书的详细页面展示该书已被荐购的次数,在读者个人信息页面展示该读者已荐购的图书列表。
  3. 读者能够取消已荐购的图书,取消荐购后该书的荐购次数相应减少。
  4. 荐购反馈,图书馆可以对被荐购图书进行处理,包括已接受荐购、正在购买中、图书已到馆、图书已上架和未采纳荐购,并给出未采纳的理由。

评论模块

评论模块包括图书的评论、修改、删除和回复评论、评论点赞和取消、管理员回评、屏蔽或删除评论信息。

  1. 读者对图书的评论按评论时间排序或按热度排序,读者可以修改或删除自己的评论。
  2. 读者可以对评论点赞或取消,评论的热度排序按点赞数量来排列,点赞数多的排前列。
  3. 系统管理员可以对评论进行回复,屏蔽或删除某条评论或者某个人的所有评论。

图书馆模块

图书馆模块包括图书馆的资料信息、图书馆审核读者、图书馆对荐购图书的反馈以及图书馆对评论的回应。

  1. 图书馆的资料信息应包括图书馆的名称、地址、联系人和联系方式。
  2. 图书馆需要审核读者的身份信息,是否是该馆读者,审核通过的才能向该馆荐购图书。
  3. 图书馆可以对被荐购图书进行处理,包括已接受荐购、正在购买中、图书已到馆、图书已上架和未采纳荐购,并给出未采纳的理由。
  4. 图书馆管理员可以对评论进行回复,屏蔽或删除某条评论或者某个人的所有评论。

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 用户的名
email Varchar类型,长度为150 邮箱地址
identity_number Int类型 身份号(工号或学号)
is_staff Int类型,长度为1 登录Admin权限
is_active Int类型,长度为1 用户的激活状态
qq 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,查看项目是否正常运行。

image.png


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容