1 需求分析
整個(gè)網(wǎng)站分為五大模塊咐旧,分別是用戶信息模塊、圖書信息模塊绩蜻、圖書薦購模塊铣墨、評(píng)論模塊和圖書館模塊。
用戶信息模塊
用戶信息模塊包括用戶注冊(cè)办绝、用戶登錄伊约、顯示用戶信息姚淆、用戶密碼修改。
- 注冊(cè)時(shí)要輸入用戶名屡律、密碼腌逢。注冊(cè)信息要求用戶名必須唯一。
- 用戶登錄時(shí)超埋,如果用戶名和密碼輸入有誤搏讶,必須提示相應(yīng)的錯(cuò)誤信息。
- 用戶登錄后霍殴,能夠查看自己的用戶信息和圖書薦購信息媒惕,還能夠修改部分用戶信息和用戶頭像。能夠修改的用戶信息包括姓名来庭、學(xué)號(hào)/工號(hào)妒蔚、手機(jī)號(hào)、微信號(hào)月弛、QQ號(hào)碼面睛、郵箱及所屬院校。
- 允許用戶修改密碼尊搬,修改密碼可以有兩種方式:一種是提供舊密碼來修改密碼;另一種是忘記密碼土涝,采用郵箱驗(yàn)證來修改密碼佛寿。
圖書信息模塊
圖書信息模塊包括圖書信息的維護(hù),圖書概要信息的分頁顯示但壮,圖書信息的模糊查詢和某個(gè)圖書的詳細(xì)信息冀泻。
- 圖書信息的維護(hù),包括對(duì)圖書的增加蜡饵、修改和刪除操作弹渔,利用Django的后臺(tái)完成。
- 圖書概要信息的分頁顯示溯祸,包括圖書信息的封面肢专、書名、作者焦辅、出版社博杖、查看詳情以及薦購操作。
- 圖書信息的模糊查詢筷登,查詢的信息包括書名剃根、作者和出版社,查詢結(jié)果同概要信息前方,也要實(shí)現(xiàn)分頁功能狈醉。
- 某個(gè)圖書的詳細(xì)信息廉油,要顯示書名、作者苗傅、出版社抒线、ISBN、圖書分類(一級(jí)分類和二級(jí)分類)金吗、出版日期十兢、圖書包裝、圖書版次摇庙、圖書頁數(shù)旱物、薦購次數(shù)、圖書開本卫袒、圖書京東價(jià)宵呛、圖書原價(jià)以及圖書的摘要信息。
圖書薦購模塊
圖書薦購模塊包括薦購圖書夕凝、已薦購圖書的展示宝穗、取消薦購、薦購反饋码秉。
- 薦購圖書逮矛,讀者在概要信息頁面和詳情頁面都要能薦購圖書,薦購圖書可選薦購理由转砖,有薦購理由的圖書館可以優(yōu)先處理须鼎。
- 已薦購圖書的展示,在圖書的詳細(xì)頁面展示該書已被薦購的次數(shù)府蔗,在讀者個(gè)人信息頁面展示該讀者已薦購的圖書列表晋控。
- 讀者能夠取消已薦購的圖書,取消薦購后該書的薦購次數(shù)相應(yīng)減少姓赤。
- 薦購反饋赡译,圖書館可以對(duì)被薦購圖書進(jìn)行處理,包括已接受薦購不铆、正在購買中蝌焚、圖書已到館、圖書已上架和未采納薦購誓斥,并給出未采納的理由综看。
評(píng)論模塊
評(píng)論模塊包括圖書的評(píng)論、修改岖食、刪除和回復(fù)評(píng)論红碑、評(píng)論點(diǎn)贊和取消、管理員回評(píng)、屏蔽或刪除評(píng)論信息析珊。
- 讀者對(duì)圖書的評(píng)論按評(píng)論時(shí)間排序或按熱度排序羡鸥,讀者可以修改或刪除自己的評(píng)論。
- 讀者可以對(duì)評(píng)論點(diǎn)贊或取消忠寻,評(píng)論的熱度排序按點(diǎn)贊數(shù)量來排列惧浴,點(diǎn)贊數(shù)多的排前列。
- 系統(tǒng)管理員可以對(duì)評(píng)論進(jìn)行回復(fù)奕剃,屏蔽或刪除某條評(píng)論或者某個(gè)人的所有評(píng)論衷旅。
圖書館模塊
圖書館模塊包括圖書館的資料信息、圖書館審核讀者纵朋、圖書館對(duì)薦購圖書的反饋以及圖書館對(duì)評(píng)論的回應(yīng)柿顶。
- 圖書館的資料信息應(yīng)包括圖書館的名稱、地址操软、聯(lián)系人和聯(lián)系方式嘁锯。
- 圖書館需要審核讀者的身份信息,是否是該館讀者聂薪,審核通過的才能向該館薦購圖書家乘。
- 圖書館可以對(duì)被薦購圖書進(jìn)行處理,包括已接受薦購藏澳、正在購買中仁锯、圖書已到館、圖書已上架和未采納薦購翔悠,并給出未采納的理由扑馁。
- 圖書館管理員可以對(duì)評(píng)論進(jìn)行回復(fù),屏蔽或刪除某條評(píng)論或者某個(gè)人的所有評(píng)論凉驻。
2 數(shù)據(jù)庫設(shè)計(jì)
圖書信息表book_info
圖書信息表是網(wǎng)站的核心數(shù)據(jù),設(shè)置網(wǎng)站的數(shù)據(jù)結(jié)構(gòu)時(shí)复罐,應(yīng)以圖書信息為核心數(shù)據(jù)涝登,逐步向外擴(kuò)展相關(guān)聯(lián)的數(shù)據(jù)信息。將圖書信息的數(shù)據(jù)表命名為book_info效诅,圖書信息表book_info的數(shù)據(jù)結(jié)構(gòu)如下表所示:
表字段 | 字段類型 | 含義 |
---|---|---|
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號(hào) |
book_press | Varchar類型戚炫,長度為50 | 出版社 |
book_pub_date | Varchar類型剑刑,長度為20 | 圖書出版日期 |
book_pack | Varchar類型,長度為2 | 圖書包裝 |
book_edition | Int類型 | 圖書版次 |
book_page | Int類型 | 圖書頁數(shù) |
book_price | Float類型,長度為8 | 圖書定價(jià) |
book_substract | Text類型 | 圖書摘要(簡介) |
cata_id | Int類型 | 外鍵施掏,連接圖書分類表 |
圖書類別表catagory
圖書信息中還有一個(gè)圖書分類的信息钮惠,需要單獨(dú)放在圖書類別表catagory中。圖書信息和圖書分類的關(guān)系是:一本圖書對(duì)應(yīng)一個(gè)類別七芭,一個(gè)類別可以對(duì)應(yīng)多本圖書素挽。因此,圖書信息表和圖書分類表是一對(duì)多的關(guān)系狸驳,需要在圖書信息表中建立指向圖書分類的外鍵预明。
表字段 | 字段類型 | 含義 |
---|---|---|
cata_id | Int類型 | 主鍵 |
cata_name | Varchar類型,長度50 | 類別的名稱 |
parent_cata | Int類型 | 外鍵耙箍,連接當(dāng)前表撰糠,類別的上一級(jí)分類的id |
圖書類別表中的parent_cata字段關(guān)聯(lián)該分類的上一級(jí)分類的cata_id,例如“小說-言情小說|科幻小說”這樣的分類在數(shù)據(jù)庫中應(yīng)該是這樣表示的:
cata_id | cata_name | parent_cata |
---|---|---|
1 | 小說 | None |
2 | 言情小說 | 1 |
3 | 科幻小說 | 1 |
4 | 文學(xué) | None |
5 | 紀(jì)實(shí)文學(xué) | 4 |
上表中parent_cata為None的代表是頂級(jí)分類究西,比如小說窗慎、文學(xué),言情小說和科幻小說的父類id是1卤材,因此上一級(jí)分類是小說遮斥,而紀(jì)實(shí)文學(xué)的父類id是4,因此上一級(jí)分類是文學(xué)扇丛。這樣我們?cè)诒4鎴D書信息的分類時(shí)术吗,只需要保存最底層的類別cata_id,然后尋級(jí)遍歷上去就能獲取該圖書所在的所有類別帆精。
用戶信息表user_info
用戶信息表user_info提供用戶信息较屿,用戶信息表由Django內(nèi)置模型User擴(kuò)展而成,表結(jié)構(gòu)如下:
表字段 | 字段類型 | 含義 |
---|---|---|
user_id | Int類型 | 主鍵 |
password | Varchar類型卓练,長度為128 | 用戶密碼 |
is_superuser | Int類型隘蝎,長度為1 | 超級(jí)用戶 |
username | Varchar類型,長度為150 | 用戶名 |
first_name | Varchar類型襟企,長度為30 | 用戶的姓 |
last_name | Varchar類型嘱么,長度為150 | 用戶的名 |
Varchar類型,長度為150 | 郵箱地址 | |
identity_number | Int類型 | 身份號(hào)(工號(hào)或?qū)W號(hào)) |
is_staff | Int類型顽悼,長度為1 | 登錄Admin權(quán)限 |
is_active | Int類型曼振,長度為1 | 用戶的激活狀態(tài) |
Varchar類型,長度為20 | 用戶的QQ號(hào)碼 | |
mobile | Varchar類型蔚龙,長度為11 | 用戶的手機(jī)號(hào)碼 |
lib_id | Varchar類型冰评,長度為50 | 外鍵,關(guān)聯(lián)圖書館信息表 |
薦購信息表rec_info
在網(wǎng)站需求中木羹,還涉及到讀者薦購和薦購反饋甲雅,因此需要薦購信息表rec_info。
表字段 | 字段類型 | 含義 |
---|---|---|
rec_id | Int類型 | 主鍵 |
rec_reason | Varcharl型,長度為150 | 薦購原因务荆,可選 |
rec_feedback | Varchar類型妆距,長度為150 | 薦購反饋,默認(rèn)為待處理函匕,隨著處理進(jìn)程娱据,更改反饋的信息,包括已接受薦購盅惜、正在購買中中剩、圖書已到館、圖書已上架和未采納薦購抒寂,并給出未采納的理由等结啼。 |
user_id | Int型 | 外鍵,關(guān)聯(lián)用戶信息表user_info |
book_id | Int型 | 外鍵屈芜,關(guān)聯(lián)圖書信息表book_info |
圖書評(píng)論表comment
讀者可以對(duì)圖書發(fā)起點(diǎn)評(píng)郊愧,同時(shí)其他讀者也可以對(duì)點(diǎn)評(píng)進(jìn)行點(diǎn)贊或回復(fù),圖書點(diǎn)評(píng)表comment結(jié)構(gòu)如下:
表字段 | 字段類型 | 含義 |
---|---|---|
comment_id | Int類型 | 主鍵 |
comment_type | Int類型井佑,長度為1 | 區(qū)分該條評(píng)論是直接評(píng)論還是回復(fù)評(píng)論 |
comment_text | Varchar類型属铁,長度為500 | 點(diǎn)評(píng)內(nèi)容 |
comment_date | Varchar類型,長度為50 | 點(diǎn)評(píng)日期 |
from_user_id | Int類型 | 外鍵躬翁,關(guān)聯(lián)用戶信息表焦蘑,表示評(píng)論人的id |
to_user_id | Int類型 | 外鍵,關(guān)聯(lián)用戶信息表盒发,表示回復(fù)目標(biāo)的id |
book_id | Int類型 | 外鍵例嘱,關(guān)聯(lián)圖書信息表 |
圖書館信息表lib_info
此外,還需要圖書館的信息表lib_info宁舰。
表字段 | 字段類型 | 含義 |
---|---|---|
lib_id | Int類型 | 主鍵 |
lib_name | Varchar類型拼卵,長度50 | 圖書館的名稱 |
lib_address | Varchar類型,長度150 | 圖書館的地址 |
lib_contact | Varchar類型蛮艰,長度20 | 圖書館的聯(lián)系人 |
lib_phone | Varchar類型腋腮,長度20 | 圖書館的聯(lián)系電話 |
lib_email | Varchar類型,長度150 | 圖書館的電子郵箱 |
3 項(xiàng)目創(chuàng)建與配置
首先打開cmd命令行印荔,cd到放置項(xiàng)目的所在文件夾,使用如下命令創(chuàng)建項(xiàng)目JiangXiongGo详羡。
django-admin startproject JiangXiongGo
然后創(chuàng)建在項(xiàng)目目錄下分別創(chuàng)建book仍律、user、recommend实柠、library和comment應(yīng)用:
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
創(chuàng)建好項(xiàng)目和應(yīng)用后水泉,我們?cè)陧?xiàng)目根目錄和每個(gè)應(yīng)用的目錄下分別創(chuàng)建文件夾templates和 static,兩者分別存放模板文件和靜態(tài)資源文件。在每個(gè)應(yīng)用下創(chuàng)建一個(gè)空白的urls.py
文件草则。搭建好的項(xiàng)目目錄如下:
項(xiàng)目目錄結(jié)構(gòu)搭建好之后钢拧,就是對(duì)項(xiàng)目進(jìn)行相關(guān)的配置,配置主要在配置文件settings.py中完成炕横。
#添加新增的應(yīng)用項(xiàng)目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',
]
#設(shè)置模板路徑
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',
],
},
},
]
#設(shè)置數(shù)據(jù)庫連接信息膜钓,使用mysql數(shù)據(jù)庫,項(xiàng)目使用的數(shù)據(jù)庫為jiangxiongGo_db卿嘲,需要提前在數(shù)據(jù)庫中創(chuàng)建好颂斜。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'jiangxiongGo_db',
'USER':'root',
'PASSWORD':'123456',
'HOST':'127.0.0.1',
'PORT':'3306',
}
}
以上是項(xiàng)目的常規(guī)配置。配置好項(xiàng)目以后拾枣,我們可以在終端輸入命令python manage.py runserver
沃疮,然后在瀏覽器中輸入http://127.0.0.1:8000,查看項(xiàng)目是否正常運(yùn)行梅肤。