




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第16頁(yè)共35頁(yè)基于Python的電商系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)目錄TOC\o"1-3"\h\u29222序言 324846第1章引言 4291431.1現(xiàn)狀分析 479801.2系統(tǒng)開發(fā)的背景 5203671.3論文的主要工作 520208第2章項(xiàng)目技術(shù)的概述 7128362.1前端技術(shù)簡(jiǎn)介 7275692.2數(shù)據(jù)庫(kù)簡(jiǎn)介 7163862.3Django簡(jiǎn)介 82142.3服務(wù)器簡(jiǎn)介 9758第3章系統(tǒng)設(shè)計(jì) 10299393.1系統(tǒng)開發(fā)及技術(shù)背景 1090463.2需求分析 12718第4章系統(tǒng)設(shè)計(jì) 15321114.1系統(tǒng)設(shè)計(jì)原則 15306184.2數(shù)據(jù)庫(kù)設(shè)計(jì) 1527491第5章系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 19183995.1首頁(yè)模塊 19119855.2詳情模塊 21227745.3注冊(cè)模塊 212665.4登錄模塊 2228085.5購(gòu)物車模塊 24178205.6后臺(tái)管理模塊 2514862第6章系統(tǒng)測(cè)試 2916986.1登錄功能測(cè)試 29199796.2注冊(cè)功能測(cè)試 2954576.3用戶功能測(cè)試 30143766.4商品訂單測(cè)試 31128276.5管理員功能測(cè)試 31306046.6測(cè)試總結(jié) 3215688總結(jié) 3323065參考文獻(xiàn) 35序言隨著網(wǎng)絡(luò)的快速發(fā)展,各個(gè)行業(yè)都進(jìn)軍了網(wǎng)絡(luò)世界,最為突出的就是電商,相對(duì)于陳舊的線下商城,線上的商城有著各式各樣的款式供選擇,并且隨著快遞行業(yè)的發(fā)展,線上商城的存在讓人們的生活變得尤為的方便,尤其在疫情期間的使用更為廣泛。自網(wǎng)絡(luò)時(shí)代的到來(lái),電商行業(yè)便大肆更改了營(yíng)業(yè)模式,從以前限制性很強(qiáng)的線下模式進(jìn)入了幾乎零限制的線上模式,現(xiàn)如今我國(guó)b2c行業(yè)中的典型代表有著近6000萬(wàn)的用戶注冊(cè)數(shù),這就大大證明了線上商城對(duì)人們所帶來(lái)的便利。本設(shè)計(jì)是基于Django技術(shù)開發(fā)一個(gè)以鞋為主體的線上商城平臺(tái),使用VisualStudioCode開發(fā)環(huán)境,Python為開發(fā)語(yǔ)言,MySQL作為數(shù)據(jù)庫(kù),建立一個(gè)專屬于自己的線上商城平臺(tái),讓人們可以在該平臺(tái)自由的挑選自己喜歡的鞋子。本文包含五個(gè)章節(jié),第一章節(jié)為引言,描述系統(tǒng)的開發(fā)背景及和意義,系統(tǒng)實(shí)現(xiàn)的主要目標(biāo);第二章節(jié)為項(xiàng)目技術(shù)概述,描述項(xiàng)目運(yùn)用的技術(shù)和其優(yōu)缺點(diǎn);第三章節(jié)為系統(tǒng)分析,涵蓋總體思路分析,系統(tǒng)功能模塊分析等;第四章節(jié)為系統(tǒng)的設(shè)計(jì),表明系統(tǒng)的數(shù)據(jù)圖和具體結(jié)構(gòu);第五章節(jié)是系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn),詳細(xì)說(shuō)明了系統(tǒng)的一些技術(shù)難點(diǎn)以及展示效果。第六章是系統(tǒng)測(cè)試,主要對(duì)系統(tǒng)中的主要功能進(jìn)行了測(cè)試和分析。
第1章引言1.1現(xiàn)狀分析隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,互聯(lián)網(wǎng)已經(jīng)成為人們知道一切現(xiàn)狀的主要選擇工具,互聯(lián)網(wǎng)本身就有著傳播性快的特征,就對(duì)應(yīng)著這一特征,產(chǎn)生了很多新型行業(yè),線上商城就是其中一種。在傳統(tǒng)的店鋪行業(yè)中,客戶還都是以過(guò)路形式進(jìn)入店鋪,久而久之就只有老客戶會(huì)進(jìn)入固定的店鋪進(jìn)行選購(gòu),只有當(dāng)推出新活動(dòng)或者促銷時(shí)才會(huì)吸引新顧客,所以從傳統(tǒng)店鋪角度而言,如何吸引新顧客成了最大的難題。隨著線上商城的推出和互聯(lián)網(wǎng)的快速發(fā)展,快遞行業(yè)的快速跟進(jìn),線上商城的普及速度可想而知,以至于現(xiàn)在的人們除了閑暇時(shí)間會(huì)去街上轉(zhuǎn)轉(zhuǎn),做做回頭客之外,其余的購(gòu)物時(shí)間大多在家里,只需要一臺(tái)電腦或者一個(gè)手機(jī)就行,極大的方便了人們的生活。現(xiàn)線上商城行業(yè)大多為寄售模式,商鋪只需在寄售平臺(tái)進(jìn)行寄售即可。和絕大多數(shù)電子商務(wù)網(wǎng)站相比,我將用波特五力模型對(duì)線上商城行業(yè)環(huán)境進(jìn)行簡(jiǎn)單分析,首先,在供應(yīng)商的議價(jià)能力上,由于線上商城擁有大批量的忠實(shí)用戶而且擁有較強(qiáng)的商業(yè)信譽(yù),所以,很多供應(yīng)商都想在線上商城上落戶以創(chuàng)造更大利潤(rùn)、占有更大市場(chǎng),這樣的話,供應(yīng)商在線上商城面前就變得很被動(dòng),所以作為供應(yīng)商而言,其議價(jià)能力很弱,關(guān)于購(gòu)買者的議價(jià)能力方面,線上商城的購(gòu)買者大都是其注冊(cè)用戶,而且,購(gòu)買者與賣方交流的途徑具有局限性,另外,線上商城的大部分商品銷售都是定價(jià)模式,所以,購(gòu)買者的議價(jià)空間很小,即使這樣,線上商城還是需要面臨新進(jìn)入者的威脅,畢竟現(xiàn)在電子商務(wù)和網(wǎng)絡(luò)營(yíng)銷發(fā)展的那么快,未來(lái)會(huì)不會(huì)有更多甚至更好的類似行業(yè)進(jìn)入也說(shuō)不準(zhǔn),所以,線上商城還是需要做好應(yīng)對(duì)新入者威脅的準(zhǔn)備,不過(guò),以目前的現(xiàn)狀來(lái)看,新入者要做到典型線上商城一樣獲得自己物流的動(dòng)態(tài)和模式存在一定的困難,特別是耗資方面,作為同種類型商城的代替品,我認(rèn)為新入者店鋪是威脅最嚴(yán)重的,通過(guò)比較新入者和舊者我們發(fā)現(xiàn),不管是商品銷售類型還是網(wǎng)站版面設(shè)計(jì),甚至物流模式方面兩者都是極其相似的,而且,近段時(shí)間以來(lái),新入者大規(guī)模的進(jìn)行品牌和信譽(yù)建設(shè),所以,在未來(lái)對(duì)線上商城產(chǎn)生替代作用不是不可能,我國(guó)b2c行業(yè)發(fā)展迅猛,各類購(gòu)物網(wǎng)站迅速崛起,可是,隨是同一行業(yè),競(jìng)爭(zhēng)強(qiáng)度卻并不相同,競(jìng)爭(zhēng)力的強(qiáng)弱和該企業(yè)所制定的營(yíng)銷模式以及對(duì)市場(chǎng)反應(yīng)的敏感程度息息相關(guān),所以,作為b2c行業(yè)代表的線上商城應(yīng)該認(rèn)識(shí)到該行業(yè)所面臨的現(xiàn)狀并及時(shí)作出調(diào)整和反映來(lái)維持行業(yè)的競(jìng)爭(zhēng)優(yōu)勢(shì)!1.2系統(tǒng)開發(fā)的背景目前線上商城的存在極大的給人們提供了便利,不過(guò)大部分店鋪都是掛在寄售平臺(tái)進(jìn)行寄售的,所有的數(shù)據(jù)都會(huì)到平臺(tái)庫(kù),由平臺(tái)掌控著一切,店鋪能管理的只有自己的商品以及即將推出的活動(dòng)之類的,后臺(tái)可查詢到所有的商品信息以及售出信息。而此球鞋商城只負(fù)責(zé)本店鋪所有的商品以及后臺(tái)管理,所有都由自己內(nèi)部人員負(fù)責(zé),一個(gè)是可以保證數(shù)據(jù)的安全性,另一個(gè)可以方便做數(shù)據(jù)分析,不需要通過(guò)平臺(tái)人員進(jìn)行三方托付。目前Pythonweb在國(guó)內(nèi)正處于發(fā)展階段,為了貼合市場(chǎng)以及提升自己的專業(yè)水平,所以采用Python來(lái)作為主要的開發(fā)語(yǔ)言。系統(tǒng)采用Django+前端js+數(shù)據(jù)庫(kù)等技術(shù),Django是Pythonweb中熱門度比較高的框架,他的適用性比較的廣泛,并且在他的里面集成了各式各樣的三方配置,使用的話只需要調(diào)出即可,無(wú)需安裝第三方庫(kù)。MySQL作為數(shù)據(jù)庫(kù)的代表,也是市場(chǎng)使用率最高的數(shù)據(jù)庫(kù),他的安裝容易,使用方式也比較的簡(jiǎn)單,大部分的市場(chǎng)需求都能夠被滿足。前端采用最基本的html加js來(lái)組成,一方面是為了提高前端的知識(shí)水平,另一方面是更能提高自己的基礎(chǔ)水平。1.3論文的主要工作對(duì)于現(xiàn)有的線上商城系統(tǒng),采用的大多是集成型,由用戶開通權(quán)限后自由創(chuàng)建店鋪;還有些是專賣型,只有自身的一家店鋪,本設(shè)計(jì)就是采用該模式,由設(shè)計(jì)者創(chuàng)建唯一管理員,所有的后臺(tái)數(shù)據(jù)只能由該管理員進(jìn)行管控。本文主要講解了該系統(tǒng)的所有功能以及使用方式,詳細(xì)講解了所有使用到的技術(shù),數(shù)據(jù)庫(kù)設(shè)計(jì)方式和功能詳細(xì)設(shè)計(jì)。系統(tǒng)采用Django+前端JS+數(shù)據(jù)庫(kù)等技術(shù),前端不是用HTML5來(lái)進(jìn)行前端靜態(tài)生成,而是用Django自帶的模板語(yǔ)言來(lái)生成,運(yùn)用Django模板語(yǔ)言除了語(yǔ)法的差別,頁(yè)面形成也是有很大的區(qū)別,模板語(yǔ)言中有后端循環(huán)、選擇等語(yǔ)句,有自己的語(yǔ)法形式,還有類中所有的繼承,不過(guò)這種繼承并不屬于數(shù)據(jù)或變量,而是屬于頁(yè)面,每個(gè)頁(yè)面都可以繼承上一個(gè)選擇繼承頁(yè)面,繼承后的頁(yè)面不需要寫基本的HTML形式,只需要在父頁(yè)面中的挖坑點(diǎn)填寫只屬于自己的語(yǔ)句即可。當(dāng)然,子頁(yè)面也可以選擇繼承父頁(yè)面坑點(diǎn)中的內(nèi)容,也可以選擇不繼承,不繼承的話就只有格式和父頁(yè)面相同。數(shù)據(jù)庫(kù)采用MySQL和Redis兩種數(shù)據(jù)庫(kù),一種是關(guān)系型數(shù)據(jù)庫(kù),一種是非關(guān)系型數(shù)據(jù)庫(kù),兩種的使用方式和區(qū)別在下文中有介紹,暫不介紹。主體語(yǔ)言為Python,Python作為一種新型的后端語(yǔ)言,所用之處極廣,目前后端、爬蟲、機(jī)器學(xué)習(xí)等領(lǐng)域都有不錯(cuò)的效果。本系統(tǒng)的所有數(shù)據(jù)都是使用Python來(lái)做爬蟲,基本爬蟲模塊是使用requests來(lái)實(shí)現(xiàn),實(shí)現(xiàn)方式為調(diào)用requests庫(kù)來(lái)執(zhí)行爬蟲。第2章項(xiàng)目技術(shù)的概述2.1前端技術(shù)簡(jiǎn)介在本次設(shè)計(jì)中,前端技術(shù)一共用到三種技術(shù),分別為HTML,CSS和JS,主要使用的是HTML和JS,HTML和CSS負(fù)責(zé)靜態(tài)頁(yè)面,JS負(fù)責(zé)動(dòng)態(tài)頁(yè)面。HTML是超文本標(biāo)記語(yǔ)言,它提供了許多標(biāo)簽通過(guò)瀏覽器展現(xiàn)出來(lái)。其中涵蓋圖片鏈接a標(biāo)簽、img標(biāo)簽、視頻video標(biāo)簽和音樂(lè)audio標(biāo)簽等等,所以說(shuō)它是一種標(biāo)記語(yǔ)言。它的特點(diǎn)是可移植性高,也就說(shuō)它跨平臺(tái),不管在什么平臺(tái)上,只要有瀏覽器就行。它主要構(gòu)建web頁(yè)面整體的網(wǎng)頁(yè)結(jié)構(gòu)。CSS是層疊樣式表,是一種用來(lái)配合HTML來(lái)使用的樣式表。它主要是幫助HTML構(gòu)造一個(gè)美麗的前端靜態(tài)頁(yè)面,其中包括對(duì)前端頁(yè)面的布局、網(wǎng)頁(yè)的背景和顏色、字體大小和樣式等。Bootstrap就是用CSS封裝好的樣式庫(kù),它為HTML提供了豐富的樣式,更好的渲染和美化網(wǎng)頁(yè)。JS全名為JavaScript,是一種配合HTML/CSS使用的腳本語(yǔ)言,主要用于Web網(wǎng)頁(yè)的動(dòng)態(tài)效果。其中包括一些及時(shí)響應(yīng)事件、前后端交互的Ajax和一些前端的邏輯處理。jQuery就是用JavaScript封裝好的簡(jiǎn)單的庫(kù),簡(jiǎn)化了JavaScript對(duì)DOM的API操作和解決瀏覽器的兼容問(wèn)題。2.2數(shù)據(jù)庫(kù)簡(jiǎn)介數(shù)據(jù)庫(kù),顧名思義就是存儲(chǔ)數(shù)據(jù)的位置。但數(shù)據(jù)庫(kù)也分為很多種,有各自不同的存儲(chǔ)形式,有硬盤型永久存儲(chǔ)數(shù)據(jù)的,也有內(nèi)存級(jí)暫時(shí)緩存數(shù)據(jù)的。Mysql和Redis就是兩種不同的數(shù)據(jù)庫(kù),Mysql為硬盤級(jí),而Redis則為內(nèi)存級(jí)。硬盤和內(nèi)存的區(qū)別還是很明顯的,像Mysql那種就是可以永久保留數(shù)據(jù),而且它的數(shù)據(jù)容量也很大,畢竟現(xiàn)流社會(huì)中購(gòu)買一塊容量比較大的硬盤還是很便宜的,遠(yuǎn)遠(yuǎn)不及內(nèi)存條的價(jià)格。Redis是一種內(nèi)存級(jí)數(shù)據(jù)庫(kù),它的容量就可能遠(yuǎn)沒有Mysql的容量大,但內(nèi)存相對(duì)于硬盤的優(yōu)點(diǎn)也是很明顯的,那就是它的速度很快,所以一般像緩存那種就是用Redis來(lái)做的,畢竟它的速度還是很可觀的。數(shù)據(jù)庫(kù)如果按是否為關(guān)系型分類的話,分為兩大類,一類就是關(guān)系型數(shù)據(jù)庫(kù),另一類就是非關(guān)系型數(shù)據(jù)庫(kù),關(guān)系型數(shù)據(jù)庫(kù)中最突出的代表就是MySQL,SQLserver等,而另一種非關(guān)系型數(shù)據(jù)庫(kù)中,我認(rèn)為最突出的兩種就是Redis和MongDB,Redis通常用作緩存,而MongDB雖然也可以用作緩存,但它的存儲(chǔ)空間比Redis要大得多,所以MongDB一般是用作長(zhǎng)文本的存儲(chǔ),因?yàn)槭莾?nèi)存級(jí)數(shù)據(jù)庫(kù),讀取數(shù)據(jù)的速度自然沒得說(shuō),而且它的存儲(chǔ)量也是較大,日后感覺會(huì)替代掉MySQL等關(guān)系型數(shù)據(jù)庫(kù)。MySQL是瑞典MySQLAB公司研發(fā)的一種小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),但因?yàn)槿鸬銶ySQLAB公司內(nèi)部的一些原因,目前MySQL是被甲骨文所收購(gòu)。MySQL是目前市場(chǎng)上最流行的關(guān)系型數(shù)據(jù)庫(kù)之一,不論在任何方面,都有它的一席之地。Redis相較于和MySQL數(shù)據(jù)庫(kù)不同的另一種存在,它是用ANSIC碼編寫的一種內(nèi)存級(jí)數(shù)據(jù)庫(kù),它的主要優(yōu)點(diǎn)是開源、可基于內(nèi)存亦可持久化、數(shù)據(jù)采用K-V型,并且它提供多種開發(fā)語(yǔ)言的API接口。Redis在目前的市場(chǎng)上一般都是用作緩存、排行榜等功能途徑的開發(fā)。2.3Django簡(jiǎn)介Django是一個(gè)重量型的開源框架不同于Flask,Django框架給開發(fā)者預(yù)置了很多功能,替開發(fā)者做了很多的選擇,很多常用的,甚至不常用的它都內(nèi)置了,只要用戶想用,都可以直接使用。比如Django擁有完善的模板機(jī)制、ORM機(jī)制等功能。Django模板機(jī)制包含模板繼承和頁(yè)面點(diǎn)語(yǔ)法,模板繼承和點(diǎn)語(yǔ)法借鑒對(duì)象的繼承和方法的調(diào)用的形式,方便開發(fā)人員的開發(fā),但是它只適用于Web全棧開發(fā),不適用于前后端分離。ORM機(jī)制稱對(duì)象關(guān)系映射機(jī)制,它幫助Python開發(fā)人員靈活使用數(shù)據(jù)模型,并且Django提供了豐富的API可以動(dòng)態(tài)訪問(wèn)數(shù)據(jù)庫(kù),Django中的ORM就相當(dāng)于把數(shù)據(jù)庫(kù)中的所有對(duì)象關(guān)系都封裝成了一個(gè)類,極大的簡(jiǎn)便了開發(fā)人員需要手寫SQL語(yǔ)句的麻煩,減輕了很大的工作量,但也因此,如果說(shuō)想要極大程度上改善SQL語(yǔ)句的性能,那么還是需要手動(dòng)對(duì)SQL語(yǔ)句進(jìn)行性能優(yōu)化,當(dāng)然,如果技術(shù)到位,也可以直接修改Django底層代碼。這樣優(yōu)化的代碼在下次的代碼編寫中也可以直接引用。并且Django還支持MySQL、Oracle、PostgreSQL等數(shù)據(jù)庫(kù)。Django可以快速設(shè)計(jì)和開發(fā)具有MTV層次的Web應(yīng)用。M表示Modle層,主要是跟數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)操作;T表示Templates層,主要是對(duì)前端頁(yè)面的渲染。V表示View層,即視圖函數(shù)層,主要是進(jìn)行一些邏輯處理2.3服務(wù)器簡(jiǎn)介本次設(shè)計(jì)使用的服務(wù)器為聯(lián)合使用,采用Nginx+uWSGI,外層采用Nginx,內(nèi)層采用uWSGI進(jìn)行代理,uWSGI本身是采用進(jìn)程+協(xié)程來(lái)實(shí)現(xiàn)的,所以在效率方面比Django本身的服務(wù)器性能好太多,所以采用uWSGI來(lái)布置服務(wù)器。Nginx較對(duì)于Django本身自帶的服務(wù)器而言,它比Django輕量,并且性能比它好,Nginx支持反向代理,而且它是開源的,占用的內(nèi)存相對(duì)而言也是比較少的,抗并發(fā)的能力也比較強(qiáng)。本系統(tǒng)主要采用Nginx的動(dòng)靜結(jié)合。動(dòng)態(tài)加載主要是負(fù)責(zé)代理uWSGI服務(wù)器。uWSGI,它主要負(fù)責(zé)實(shí)現(xiàn)WSGI、uwsgi、Http等協(xié)議。Nginx主要就是用HttpUwsgiModule來(lái)與uWSGI服務(wù)進(jìn)行數(shù)據(jù)交換。WSGI是一種服務(wù)網(wǎng)關(guān),它是服務(wù)器與Web應(yīng)用通信的一種規(guī)范。
第3章系統(tǒng)設(shè)計(jì)3.1系統(tǒng)開發(fā)及技術(shù)背景最近幾年,由于網(wǎng)絡(luò)的迅速發(fā)展,網(wǎng)上商城已經(jīng)成為了目前的主流行業(yè),主打著方便、快捷的服務(wù)闖入了人們的生活中,所以我才會(huì)選擇以線上商城作為主題來(lái)做該系統(tǒng)。近幾年來(lái),軟件行業(yè)融入了很多新技術(shù),例如Python、GO,但這些新的技術(shù)還處于發(fā)展期,技術(shù)并不是那么成熟。由于近年來(lái)人工智能方向科技的爆發(fā),人們?cè)谛录夹g(shù)中的著重點(diǎn)都?jí)涸诹薖ython上,正因?yàn)镻ython的語(yǔ)法簡(jiǎn)單,易讀,而且特別適合剛接觸編程行業(yè)的人去學(xué)習(xí),所以在近兩年都受到了很大的關(guān)注。另一方面Python也是目前最為流行的腳本語(yǔ)言,Python腳本就類似于“萬(wàn)金油”一般,不管在什么方面都會(huì)有所存在,甚至于有的其他語(yǔ)言的設(shè)計(jì)師覺得其他語(yǔ)言設(shè)計(jì)出來(lái)的模塊性能并不是很好,那他就可能會(huì)用其他語(yǔ)言來(lái)設(shè)計(jì),而首選的其他語(yǔ)言必然是Python。近幾年P(guān)ython爬蟲也是非?;鸨穆殬I(yè),目前主流的爬蟲語(yǔ)言為Python和Java,而因?yàn)镻ython的語(yǔ)法簡(jiǎn)單,代碼量比Java的代碼量少之又少,所以大多數(shù)的公司首選還是用Python來(lái)進(jìn)行爬蟲操作。數(shù)據(jù)庫(kù)方面,因?yàn)槟壳笆袌?chǎng)上流行的數(shù)據(jù)庫(kù)多種多樣,多而雜,但如果按是否為關(guān)系型分的話主分要分為兩大類,一類是關(guān)系型數(shù)據(jù)庫(kù),一類是非關(guān)系型數(shù)據(jù)庫(kù),關(guān)系型數(shù)據(jù)庫(kù)中最流行的可能就是MySQL、SQLserver等,而非關(guān)系型數(shù)據(jù)庫(kù)中最流行的就是Redis,Mongdb等,兩類數(shù)據(jù)庫(kù)雖然都可以存儲(chǔ)數(shù)據(jù),但是他們的存儲(chǔ)形式以及操作方式是大有不同的。關(guān)系型數(shù)據(jù)庫(kù)就是我們常見的那種分庫(kù)分表,每個(gè)表中設(shè)計(jì)字段,設(shè)計(jì)字段類型,允許多表連接,每個(gè)表中的數(shù)據(jù)看起來(lái)都是規(guī)規(guī)整整的。而非關(guān)系型數(shù)據(jù)庫(kù)則如表面意思一樣,它的內(nèi)部不存在多表連接,它有自己建立自己的表,它是沒有庫(kù)的,每個(gè)表中的數(shù)據(jù)就如同表格一樣,沒有規(guī)定的類型,也沒有相對(duì)應(yīng)的關(guān)系。所以這兩種數(shù)據(jù)庫(kù)的作用也是不同的,關(guān)系型數(shù)據(jù)庫(kù)通常用于存儲(chǔ)大型數(shù)據(jù),因?yàn)樗闹黧w就是存放于硬盤當(dāng)中,所以說(shuō)它可以包含的數(shù)據(jù)量是很大的,但正因?yàn)槭侵苯哟鎯?chǔ)在硬盤當(dāng)中,所以它的存取速度是相對(duì)而言較慢的,這樣就需要對(duì)它的性能進(jìn)行測(cè)試,這就導(dǎo)致后來(lái)有了專門在數(shù)據(jù)庫(kù)方面做測(cè)試的設(shè)計(jì)師,主要做的就是對(duì)SQL語(yǔ)句的測(cè)試以及數(shù)據(jù)庫(kù)性能方面的測(cè)試,所以說(shuō)關(guān)系型數(shù)據(jù)庫(kù)主要的并不在于數(shù)據(jù)的存儲(chǔ),而在于一個(gè)系統(tǒng)調(diào)用數(shù)據(jù)庫(kù)的快慢,調(diào)用的性能差距直接就能影響客戶的體驗(yàn),甚至加載一段數(shù)據(jù)的時(shí)候能加載十幾分鐘。后來(lái)就有了非關(guān)系型數(shù)據(jù)庫(kù),非關(guān)系型數(shù)據(jù)庫(kù)的出現(xiàn)就是為了解決關(guān)系型數(shù)據(jù)庫(kù)讀取數(shù)據(jù)太慢的原因。非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)方式是不同的,關(guān)系型數(shù)據(jù)庫(kù)是將數(shù)據(jù)直接存儲(chǔ)至硬盤中,而非關(guān)系型數(shù)據(jù)庫(kù)則是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,硬盤和內(nèi)存的兩種存儲(chǔ)方式,在目前的主流技術(shù)中,硬盤有機(jī)械硬盤和固態(tài)硬盤兩種,固態(tài)硬盤的數(shù)據(jù)讀取速度是比機(jī)械硬盤高的,而內(nèi)存和硬盤的主要區(qū)別,就算通過(guò)價(jià)格來(lái)判定也是可以判定的出來(lái)的,內(nèi)存存儲(chǔ)數(shù)據(jù)量不算很多,雖然現(xiàn)在科技在不斷進(jìn)步,但相較于硬盤而言,內(nèi)存的存儲(chǔ)量是遠(yuǎn)低于硬盤的。硬盤的主要特點(diǎn)就是存儲(chǔ)量大,性價(jià)比高,這就導(dǎo)致了關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)兩者的數(shù)據(jù)讀取速度以及存儲(chǔ)量的巨大差異。關(guān)系型數(shù)據(jù)庫(kù)通常是用來(lái)做需要做永久保存的數(shù)據(jù)存儲(chǔ),而非關(guān)系型數(shù)據(jù)庫(kù)通常就是用作緩存,或者做排行榜功能,Redis在做排行榜方面是非常出色的,將用戶最常訪問(wèn)的數(shù)據(jù)備份在非關(guān)系型數(shù)據(jù)庫(kù)中,這樣客戶每次訪問(wèn)數(shù)據(jù)時(shí)就不需要再調(diào)用關(guān)系型數(shù)據(jù)庫(kù),只需要在非關(guān)系型數(shù)據(jù)庫(kù)中調(diào)用用作緩存的即可。但緩存的存在也引來(lái)了很多的問(wèn)題,例如緩存穿透、直接越過(guò)緩存訪問(wèn)數(shù)據(jù)庫(kù)導(dǎo)致數(shù)據(jù)加載問(wèn)題等,緩存數(shù)據(jù)量的過(guò)多同樣也是不可或缺的問(wèn)題,所以后來(lái)為了數(shù)據(jù)庫(kù)方面的安全,也是有了非關(guān)系型數(shù)據(jù)庫(kù)的“分庫(kù)分表”,但此“分庫(kù)分表”是和關(guān)系型數(shù)據(jù)庫(kù)的分庫(kù)分表不一樣,它是用多臺(tái)非關(guān)系型數(shù)據(jù)庫(kù)同時(shí)做緩存,并且他們都有各自的路由,是存在于網(wǎng)絡(luò)中的,只不過(guò)可能做了代理,所以說(shuō)外網(wǎng)看不見這些數(shù)據(jù)庫(kù)的實(shí)質(zhì)存在。“分庫(kù)分表”操作就是將超過(guò)界限的數(shù)據(jù)分配到另一個(gè)數(shù)據(jù)庫(kù)中并留作一行作為標(biāo)志行,但此操作只是將非關(guān)系型的數(shù)據(jù)量做了提升,但非關(guān)系型數(shù)據(jù)庫(kù)的性能卻因此有了下降,所以后來(lái)又研發(fā)了一種改進(jìn)的方法——路由分配,對(duì)每個(gè)用戶的ID或IP進(jìn)行篩選,可以對(duì)ID或IP進(jìn)行除法操作,除的基數(shù)可以為數(shù)據(jù)庫(kù)的數(shù)量,也可以是自己設(shè)定的值。這樣形成的結(jié)果就是劃定多少個(gè)用戶的緩存存在于一個(gè)非關(guān)系型數(shù)據(jù)庫(kù)中,等需要讀取的時(shí)候也是通過(guò)劃分的結(jié)果,直接到數(shù)據(jù)庫(kù)中去調(diào)用即可。這樣即保證了非關(guān)系型數(shù)據(jù)庫(kù)原有的讀取速度,也保證了在數(shù)據(jù)量極大的時(shí)候數(shù)據(jù)庫(kù)也有足夠的空間去存儲(chǔ)。非關(guān)系型數(shù)據(jù)庫(kù)中還有一種最常見的黑客攻擊,那就是緩存穿透,緩存穿透的原理很簡(jiǎn)單,就是通過(guò)一直訪問(wèn)緩存中所不存在的數(shù)據(jù),因?yàn)榫彺嬷写娣诺臄?shù)據(jù)類型是一種鍵值對(duì)的數(shù)據(jù),正常而言,當(dāng)訪問(wèn)到緩存所不存在的健值時(shí),都會(huì)直接到關(guān)系型數(shù)據(jù)庫(kù)中直接調(diào)取數(shù)據(jù),那樣,緩存穿透的攻擊即有了可實(shí)行的機(jī)會(huì),通過(guò)爬蟲或一些執(zhí)行代碼一直不停的訪問(wèn)那個(gè)不存在的緩存,正因?yàn)椴淮嬖?,所以系統(tǒng)就會(huì)直接跳過(guò)緩存層,訪問(wèn)數(shù)據(jù)層,但一直不停的訪問(wèn)數(shù)據(jù)層,這對(duì)數(shù)據(jù)層的壓力是非常大的,如果是處于系統(tǒng)的高峰值,那么極有可能產(chǎn)生系統(tǒng)宕機(jī),那樣造成的損失是特別慘重的,所以就需要對(duì)緩存穿透這種攻擊方式進(jìn)行抵御。抵御的方式無(wú)非于兩種,在緩存訪問(wèn)不到的情況下,訪問(wèn)數(shù)據(jù)層,數(shù)據(jù)層也訪問(wèn)不到或者已經(jīng)訪問(wèn)到了數(shù)據(jù),那么即刻添加至緩存中,即使在數(shù)據(jù)層沒有訪問(wèn)到數(shù)據(jù),也要將結(jié)果添加至緩存中,那么就可以有效地抵制緩存穿透攻擊。在框架方面,我選擇的是Django框架,目前市場(chǎng)所存在的Python框架有很多,但最為主流的有三種,分為Django、Flask和Tornado,Tornado在最新版本中因?yàn)槌烦硕鄥f(xié)程,導(dǎo)致Tornado的執(zhí)行速度大幅度下降,所以Tornado的使用也是變得少之又少,在使用中的也是用的之前的版本。Flask和Django是目前Python框架的兩巨頭,Django框架是把所有的功能都已經(jīng)封裝好,只要用戶想要使用就可以直接使用,而Flask框架則是只提供一個(gè)核心代碼,如果想要其他的功能,就需要去社區(qū)中心進(jìn)行下載,也可以自己編寫,總結(jié)而言就是Django框架里面的功能比較全面,而Flask框架就是擴(kuò)展性較高,可根據(jù)自己的需求自由更改底層代碼。3.2需求分析線上商城主要分為兩種,一種為集成型,里面包含了各種商家信息,例如淘寶,京東;還有一種是為客戶單獨(dú)設(shè)計(jì)的網(wǎng)站,網(wǎng)站即商鋪,里面所有的商品全是由商鋪?zhàn)孕猩蟼鳎N類分明,設(shè)計(jì)起來(lái)也是很清晰的。該項(xiàng)目屬于客戶單獨(dú)設(shè)計(jì),所有商品都是由客戶自己提供,自己為店鋪?zhàn)鰯?shù)據(jù)處理。模塊分別有七個(gè)部分組成,分別是:主頁(yè)模塊、詳情信息模塊、登錄頁(yè)面模塊、注冊(cè)信息模塊、個(gè)人用戶信息模塊、購(gòu)物車訂單模塊、用戶支付模塊。業(yè)務(wù)流程圖如圖3-1所示。圖3-1業(yè)務(wù)流程圖本系統(tǒng)主要實(shí)現(xiàn)的功能是用戶自由購(gòu)買商品,商家只需要管理商品庫(kù)存以及訂單處理即可。根據(jù)這個(gè)系統(tǒng)所要實(shí)現(xiàn)的目的和任務(wù),總結(jié)出這個(gè)系統(tǒng)最終所要實(shí)現(xiàn)的功能需求如下:1.登錄模塊此功能為用戶登錄,通過(guò)賬號(hào)密碼以及驗(yàn)證碼進(jìn)行登錄,確保操作者是本人,防止惡意登錄。已經(jīng)登錄的用戶,系統(tǒng)會(huì)將用戶ID進(jìn)行session保存,在訪問(wèn)用戶個(gè)人模塊時(shí)會(huì)對(duì)用戶ID進(jìn)行檢測(cè),確保用戶信息安全。2.注冊(cè)模塊此功能為新用戶準(zhǔn)備,用戶通過(guò)此接口為自己建立一個(gè)新的賬號(hào)密碼來(lái)為以后使用。注冊(cè)時(shí)需要提供數(shù)據(jù)庫(kù)中所不存在的用戶名;密碼必須確保為六位以上,再次輸入密碼欄是為了確保用戶能夠記住。3.首頁(yè)模塊此功能為新用戶準(zhǔn)備,用戶通過(guò)此接口為自己建立一個(gè)新的賬號(hào)密碼來(lái)為以后使用。注冊(cè)時(shí)需要提供數(shù)據(jù)庫(kù)中所不存在的用戶名;密碼必須確保為六位以上,再次輸入密碼欄是為了確保用戶能夠記住。4.詳情模塊此功能為新用戶準(zhǔn)備,用戶通過(guò)此接口為自己建立一個(gè)新的賬號(hào)密碼來(lái)為以后使用。注冊(cè)時(shí)需要提供數(shù)據(jù)庫(kù)中所不存在的用戶名;密碼必須確保為六位以上,再次輸入密碼欄是為了確保用戶能夠記住。5.個(gè)人信息模塊此模塊展示了用戶的所有信息,用戶可通過(guò)該頁(yè)面修改自己的信息。6.購(gòu)物車模塊此模塊為用戶的添加購(gòu)物的模塊,對(duì)于用戶添加到購(gòu)物車中的商品信息進(jìn)行展示。7.支付模塊此模塊為接口模塊,調(diào)用的是支付寶的支付接口,通過(guò)回調(diào)數(shù)據(jù)來(lái)確認(rèn)用戶有無(wú)付款。
第4章系統(tǒng)設(shè)計(jì)4.1系統(tǒng)設(shè)計(jì)原則1.安全性原則用戶的所有信息都必須在安全上加以保障,若用戶的地址或者電話泄露,會(huì)造成很多不必要的麻煩,所以這就要在很多安全方面加以考慮,最基礎(chǔ)的就是對(duì)登錄密碼進(jìn)行加密,這樣即使是管理員也無(wú)法得知用戶密碼;接著就是用用戶ID對(duì)每個(gè)不同的用戶進(jìn)行隔離。2.可擴(kuò)充性原則隨著用戶的日益增加,所有的功能模塊都需要有一定的擴(kuò)充能力,方便日后的修改以及擴(kuò)充。眾所周知,項(xiàng)目二次開發(fā)是比較正常的,所以為了滿足二次開發(fā),每個(gè)模塊都填上說(shuō)明或編寫開發(fā)說(shuō)明,講解每個(gè)模塊的功能和作用來(lái)方便以后開發(fā)。3.提高用戶體驗(yàn)所有的電商項(xiàng)目都是以用戶為一切的中心,用戶體驗(yàn)最大,所以一切必須以用戶怎么操作最舒服怎么來(lái)。4.具有完整的系統(tǒng)接口日后可能會(huì)有越來(lái)越多的功能加入,所以為了保證系統(tǒng)的完整性,對(duì)外可以提供完整的系統(tǒng)接口,確保日后即使添加的功能有些許的問(wèn)題,但最主要的系統(tǒng)是不可能出現(xiàn)問(wèn)題的。4.2數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)分為兩個(gè)設(shè)計(jì),一個(gè)為表結(jié)構(gòu)的設(shè)計(jì),還有一個(gè)為字段設(shè)計(jì)。表結(jié)構(gòu)設(shè)計(jì)有兩種,一種是數(shù)據(jù)庫(kù)引擎,還有一種是表與表的關(guān)系。數(shù)據(jù)庫(kù)引擎通常有Innodb和Myisam兩種,根據(jù)需求自由選擇。而表于表的關(guān)系主要有三種,分為一對(duì)一、一對(duì)多和多對(duì)多。表中字段的關(guān)系主要就是邏輯關(guān)系,表中有主鍵等關(guān)鍵字,這些關(guān)鍵字主要就是用到表和表的關(guān)系連接中的。表中的字段有自己所特有的屬性,每個(gè)字段都有自己所特有的意義,不可替代。本項(xiàng)目主要是以用戶為中心展開表的設(shè)計(jì)。用戶表和商品表為多對(duì)多關(guān)系,順之產(chǎn)生第三張表為購(gòu)物車表。用戶表和訂單表之間為一對(duì)多關(guān)系。用戶表和地址表也是一對(duì)多關(guān)系。訂單表和訂單地址表為一對(duì)一關(guān)系。訂單表和訂單商品為一對(duì)多關(guān)系[3]。下面是數(shù)據(jù)庫(kù)各模塊表關(guān)系和表字段設(shè)計(jì)。本項(xiàng)目中主要表之間的E-R關(guān)系如圖4-1所示。圖4-1項(xiàng)目主要表E-R關(guān)系圖首頁(yè)模塊表結(jié)構(gòu)設(shè)計(jì)首頁(yè)模塊輪播表首頁(yè)展示的輪播表,最主要就是為輪播提供數(shù)據(jù),若想要修改輪播數(shù)據(jù),直接在該表中修改即可,如表4-1所示。表4-1首頁(yè)模塊輪播表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)titlechar50標(biāo)題image_urlimage圖片路徑date_publishdatetime發(fā)布時(shí)間indexinteger排列順序首頁(yè)模塊主要商品表首頁(yè)商品數(shù)據(jù)表,為首頁(yè)提供展示商品,是除輪播之外的普通數(shù)據(jù)展示,如表4-2所示。表4-2首頁(yè)模塊主要商品表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)categorychar256分類外鍵namechar30名稱brandchar256品牌外鍵sizeChar256尺寸外鍵old_pricefloat原價(jià)new_pricefloat現(xiàn)價(jià)discountfloat折扣descchar100簡(jiǎn)介salesinteger銷量tagchar256標(biāo)簽外鍵numinteger庫(kù)存image_url_iimage展示圖片路徑image_url_limage詳情圖片路徑image_url_mimage詳情圖片路徑2image_url_rimage詳情圖片路徑3image_url_cimage購(gòu)物車展示圖片詳情模塊表結(jié)構(gòu)設(shè)計(jì)商品分類表所有的商品數(shù)據(jù)都在其中,如表4-3所示。表4-3商品分類表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)typchar20所屬大類namechar30分類名稱indexinteger分類的排序sexinteger性別商品品牌表商品品牌表,提供了所有的商品品牌,如表4-4所示。表4-4商品分類表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)namechar30品牌名稱indexinteger64排列順序商品尺寸表商品尺寸表,提供了所有的商品尺寸,如表4-5所示。表4-5商品分類表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)namechar30尺寸indexinteger64排列順序商品標(biāo)簽表商品標(biāo)簽表,提供了所有的商品標(biāo)簽,如表4-6所示。表4-6商品標(biāo)簽表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)namechar30標(biāo)簽購(gòu)物車模塊表結(jié)構(gòu)設(shè)計(jì)購(gòu)物車中的數(shù)據(jù)表,是用戶存放在購(gòu)物車中的數(shù)據(jù),如表4-7所示。表4-7購(gòu)物車商品表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)clothingchar購(gòu)物車中產(chǎn)品條目quantityinteger數(shù)量sum_pricefloat小計(jì)用戶表結(jié)構(gòu)設(shè)計(jì)用戶表,記錄了用戶所有的登錄信息,如表4-8所示。表4-8用戶表字段類型長(zhǎng)度備注idinteger主鍵自增長(zhǎng)qqchar20關(guān)聯(lián)qqmobilechar11用戶手機(jī)號(hào)usernamechar256用戶名emailchar256用戶郵箱passwordchar256用戶密碼
第5章系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)本次系統(tǒng)分為首頁(yè)模塊、詳情模塊、登錄模塊、注冊(cè)模塊、個(gè)人信息模塊、購(gòu)物車模塊、支付模塊七個(gè)子模塊,每個(gè)模塊之前都可進(jìn)行互調(diào),以保證數(shù)據(jù)的完整性。5.1首頁(yè)模塊首頁(yè)模塊是一個(gè)網(wǎng)上購(gòu)物必需的功能之一,因?yàn)橛脩暨M(jìn)入App中,第一下展示的就是首頁(yè)模塊的頁(yè)面。首頁(yè)模塊頁(yè)面可以說(shuō)是該項(xiàng)目中的“臉面”,也是用戶訪問(wèn)量最多的頁(yè)面,所以往往一個(gè)好的網(wǎng)站都有一個(gè)很好的首頁(yè)展示。首頁(yè)模塊主要包含了輪播圖、導(dǎo)航、必購(gòu)商品和主要展示。輪播圖主要利用前端swiper框架來(lái)實(shí)現(xiàn),這類主要是商家做一些廣告宣傳的。導(dǎo)航是一些銷量比較排前的商品推薦給用戶。必購(gòu)商品是人們生活必需品,方便用戶選擇。主要展示是商品的分類,根據(jù)用戶喜愛來(lái)選擇,如圖5-1所示。因?yàn)槭醉?yè)需要進(jìn)行的數(shù)據(jù)操作很少,所以只展示前端的模板代碼,主要代碼如下:{%extends'base.html'%}#繼承base_main.html{%loadstaticfiles%} #讀取繼承文件中的staticfiles塊{%blockbanner_block%} #填補(bǔ)繼承文件中的banner_block塊{%include'ad.html'%} #讀取ad.html文件{%endblock%}{%blockcontent_block%}<divclass="content"><divclass="container"><divclass="content-top"><h1>最新商品</h1><divclass="content-top1">{%forcloinclo_list%}<formaction="{%url'add_cart'%}"method="post"id="subform{{clo.id}}">{%csrf_token%}<divclass="col-md-3col-md2"><divclass="col-md1simpleCart_shelfItem"><ahref="{%url'detail'%}?did={{clo.id}}"><imgclass="img-responsive"src="{{MEDIA_URL}}{{clo.image_url_i}}"alt=""/></a><h3><ahref="{%url'detail'%}?did={{clo.id}}">{{}}</a></h3><divclass="price"><h5class="item_price">{{clo.new_price}}元</h5><inputtype="hidden"name="chid"value="{{clo.id}}"><ahref="{%url'detail'%}?did={{clo.id}}">details>></a><divclass="clearfix"></div></div></div></div></form>{%endfor%}<divclass="clearfix"></div></div></div>{%include'pagination.html'%}</div></div>{%endblock%}defgetPage(request,clo_list):paginator=Paginator(clo_list,8)try:page=int(request.GET.get('page',1))clo_list=paginator.page(page)except(EmptyPage,InvalidPage,PageNotAnInteger):clo_list=paginator.page(1)returnclo_listdefgetDiscount(request):try:clo_list=Clothing.objects.filter(new_price__lt=F('old_price'))clo_list=getPage(request,clo_list)logger.debug("lenclo_list:%d",len(clo_list))discount=TrueexceptExceptionase:logger.error(e)returnrender(request,'products.html',locals())圖5-1首頁(yè)展示5.2詳情模塊詳情模塊是為了更加完整的展示商品的信息,以供客戶進(jìn)行最完整的選擇。詳情模塊主要包含了球鞋商品詳細(xì)內(nèi)容以及將其加入購(gòu)物車的操作。通過(guò)根據(jù)了解其詳細(xì)的商品參數(shù)來(lái)達(dá)到選擇最合適的商品。只有在用戶已登錄的情況下才可將其商品加入購(gòu)物車;若顧客未登錄狀態(tài)下無(wú)法加購(gòu)會(huì)跳轉(zhuǎn)至網(wǎng)站登錄頁(yè)面,只有在登錄成功的情況下才可將商品加入用戶的購(gòu)物車,如圖5-2所示。主要代碼如下:defdetail(request):try:did=request.GET.get('did',None)try:clo=Clothing.objects.get(pk=did)exceptClothing.DoesNotExist:returnrender(request,'error.html',{"reason":"商品不存在"})exceptExceptionase:logger.error(e)returnrender(request,'single.html',locals())圖5-2詳情頁(yè)面展示5.3注冊(cè)模塊用戶登錄是電商產(chǎn)品的必需功能之一,用戶想要使用App購(gòu)物就必須有一個(gè)自己的賬號(hào),從而才可以在網(wǎng)上購(gòu)買自己滿意的商品。注冊(cè)賬號(hào)是必不可少的一步。注冊(cè)模塊主要包含兩個(gè)功能分別為用戶的注冊(cè)和郵箱激活賬號(hào)。用戶注冊(cè)是指用戶在注冊(cè)時(shí)App后臺(tái)需要用戶輸入個(gè)人的基本信息,其中包括用戶名稱,密碼以及確認(rèn)密碼,用戶的郵箱以及用戶頭像等,如果用戶名稱已經(jīng)被注冊(cè)或者用戶輸入的信息格式不正確系統(tǒng)將向用戶顯示相應(yīng)錯(cuò)誤的提示信息,使其修改注冊(cè)內(nèi)容,在注冊(cè)完以后,即可進(jìn)行登錄,如圖5-3所示。主要代碼:defdo_reg(request):try:ifrequest.method=='POST':reg_form=RegForm(request.POST)ifreg_form.is_valid():user=User.objects.create(username=reg_form.cleaned_data["username"],email=reg_form.cleaned_data["email"],password=make_password(reg_form.cleaned_data["password"]),)user.save()user.backend='django.contrib.auth.backends.ModelBackend'login(request,user)returnredirect(request.POST.get('source_url'))else:returnrender(request,'error.html',{'reason':reg_form.errors})else:reg_form=RegForm()exceptExceptionase:logger.error(e)returnrender(request,'register.html',locals())圖5-3注冊(cè)頁(yè)面5.4登錄模塊登錄是使用剛剛注冊(cè)的賬戶登錄到App,根據(jù)登錄頁(yè)面的提示輸入相應(yīng)的信息,比如用戶名和密碼。輸入完之后,系統(tǒng)將驗(yàn)證用戶帳戶和密碼是否正確,如果驗(yàn)證正確,就會(huì)跳轉(zhuǎn)到我的模塊頁(yè)面。如果驗(yàn)證錯(cuò)誤,提示相關(guān)錯(cuò)誤。登錄模塊主要包含用戶名和密碼的驗(yàn)證以及驗(yàn)證碼的驗(yàn)證。用戶名和密碼的驗(yàn)證是指用戶注冊(cè)的用戶名和密碼是否與登錄時(shí)的用戶名和密碼一致,或則是指數(shù)據(jù)庫(kù)中是否有該用戶名和密碼。驗(yàn)證碼主要用于防止一些爬蟲爬取商品信息,如圖5-4所示。主要代碼如下:defdo_login(request):try:ifrequest.method=='POST':login_form=LoginForm(request.POST)iflogin_form.is_valid():username=login_form.cleaned_data["username"]password=login_form.cleaned_data["password"]user=authenticate(username=username,password=password)ifuserisnotNone:user.backend='django.contrib.auth.backends.ModelBackend'#指定默認(rèn)的登錄驗(yàn)證方式login(request,user)else:returnrender(request,'error.html',{'reason':'登錄驗(yàn)證失敗'})returnredirect(request.POST.get('source_url'))else:returnrender(request,'error.html',{'reason':login_form.errors})else:login_form=LoginForm()exceptExceptionase:logger.error(e)returnrender(request,'login.html',locals())#退出defdo_logout(request):try:logout(request)exceptExceptionase:logger.error(e)login_form=LoginForm()returnrender(request,'login.html',locals())圖5-4登錄頁(yè)面5.5購(gòu)物車模塊購(gòu)物車模塊是網(wǎng)上購(gòu)物的主要功能之一,用戶一次購(gòu)物的商品都是在購(gòu)物車中。購(gòu)物車模塊也是App的最重要的環(huán)節(jié),用戶商品的選擇和下單都跟購(gòu)物車有關(guān)系。購(gòu)物車模塊包含下單用戶的詳細(xì)信息、加入購(gòu)物車商品的展示、商品的選中和付款總價(jià)。下單用戶的詳細(xì)信息包含收貨人、電話號(hào)碼、收貨地址和送達(dá)時(shí)間,方便商家發(fā)貨。購(gòu)物車商品展示主要是商品的數(shù)量和單價(jià)。商品的選中和付款總價(jià)是指購(gòu)物車中哪些商品現(xiàn)在購(gòu)買以及購(gòu)買的付款總價(jià),如圖5-5所示。主要代碼:#查看購(gòu)物車@authenticated_viewdefview_cart(request):cart=request.session.get(request.user.id,None)returnrender(request,'checkout.html',locals())#添加購(gòu)物車@authenticated_viewdefadd_cart(request):try:chid=request.POST.get('chid',None)print(chid)try:clothing=Clothing.objects.get(pk=chid)exceptClothing.DoesNotExist:returnrender(request,'error.html',{'reason':'商品不存在'})cart=request.session.get(request.user.id,None)ifnotcart:cart=Cart()cart.add(clothing)request.session[request.user.id]=cartelse:cart.add(clothing)request.session[request.user.id]=cartexceptExceptionase:logger.error(e)returnrender(request,'checkout.html',locals())#清空購(gòu)物車@authenticated_viewdefcleanCart(request):flag=request.GET.get('flag',None)ifflag:cart=Cart()request.session[request.user.id]=cartreturnrender(request,'checkout_ok.html',locals())else:cart=Cart()request.session[request.user.id]=cartreturnrender(request,'checkout.html',locals())@authenticated_viewdefclean_one_item(request,id):item=Nonetry:item=Clothing.objects.get(pk=id)exceptClothing.DoesNotExist:passifitem:item.delete()cart=request.session.get(request.user.id,None)returnrender(request,'checkout.html',{'cart':cart})圖5-5購(gòu)物車頁(yè)面5.6后臺(tái)管理模塊后臺(tái)管理模塊采用的是Django的admin模塊,他是集成于Django框架之中的,我們只需要通過(guò)命令行來(lái)創(chuàng)建管理員賬號(hào),然后通過(guò)網(wǎng)頁(yè)跳至后臺(tái)頁(yè)面,輸入管理員賬號(hào)密碼,他就會(huì)把所有已注冊(cè)的數(shù)據(jù)庫(kù)以圖中形式展示,管理員可以將數(shù)據(jù)庫(kù)中的每一項(xiàng)數(shù)據(jù)進(jìn)行添加、修改以及刪除等,如圖5-6所示。圖5-6后臺(tái)管理頁(yè)面5.6.1添加用戶信息此頁(yè)面實(shí)現(xiàn)管理員對(duì)用戶信息添加管理,添加內(nèi)容包括用戶名、密碼、郵箱、注冊(cè)時(shí)間、手機(jī)號(hào)碼等等,已被注冊(cè)過(guò)得用戶名無(wú)法注冊(cè)。其中登錄名、密碼等不為空,密碼、郵箱等格式驗(yàn)證。添加用戶信息界面如圖5-7所示。圖5-7添加用戶頁(yè)面5.6.2用戶管理此頁(yè)面以列表的形式顯示用戶,可查看用戶信息列表,可以進(jìn)行查看、編輯、刪除等操作,如圖5-8所示。圖5-8用戶管理5.6.3添加商品信息此頁(yè)面實(shí)現(xiàn)管理員對(duì)商品信息添加管理,添加內(nèi)容包括品牌分類、商品名稱,商品名稱、尺寸尺碼、價(jià)格折扣以及商品簡(jiǎn)介和銷量等進(jìn)行添加。添加商品信息界面如圖5-9所示。圖5-9添加商品頁(yè)面5.6.4商品管理此頁(yè)面以列表的形式顯示用戶,可查看商品信息列表,可以進(jìn)行查看、編輯、刪除等操作,如圖5-10所示。圖5-10商品管理頁(yè)面
第6章系統(tǒng)測(cè)試6.1登錄功能測(cè)試登錄界面是系統(tǒng)的入口,在整個(gè)系統(tǒng)中的地位是非常重要的。進(jìn)入登錄界面后,用戶可以輸入自己的賬號(hào)用戶名、密碼進(jìn)行登錄,以便進(jìn)行下一步的操作,測(cè)試情況如表6-1所示。表6-1登錄測(cè)試測(cè)試內(nèi)容用戶登錄功能輸入數(shù)據(jù)1.用戶名或密碼為空2.用戶名或密碼錯(cuò)誤3.用戶名和密碼正確預(yù)期輸出1.無(wú)法登錄2.無(wú)法登錄3.登錄成功實(shí)際輸出1.無(wú)法登錄2.無(wú)法登錄3.登錄成功測(cè)試結(jié)論通過(guò)用戶登錄成功后,登錄界面切換,如圖6-1所示。圖6-1登錄成功6.2注冊(cè)功能測(cè)試注冊(cè)成為會(huì)員后才能享有網(wǎng)站的所有用戶功能,并且每個(gè)會(huì)員的登錄名唯一,便于管理員管理,測(cè)試情況如表6-2所示。表6-2注冊(cè)測(cè)試測(cè)試內(nèi)容用戶注冊(cè)功能輸入數(shù)據(jù)登錄名或密碼為空2.登錄名已存在3.密碼或郵箱格式不正確4.確認(rèn)密碼兩次不一致預(yù)期輸出1.提示完善信息2.提示改名3.提示修正格式4.注冊(cè)成功實(shí)際輸出1.提示完善信息2.提示改名3.提示修正格式4.注冊(cè)成功測(cè)試結(jié)論通過(guò)注冊(cè)成功后,直接跳轉(zhuǎn)登錄頁(yè)面,如圖6-2所示。圖6-2注冊(cè)成功6.3用戶功能測(cè)試商品加入購(gòu)物車測(cè)試,測(cè)試情況如表6-3所示。表6-3加入購(gòu)物車測(cè)試測(cè)試內(nèi)容商品加入購(gòu)物車輸入操作1.商品未加入購(gòu)物車2.商品已加入購(gòu)物車3.清空購(gòu)物車預(yù)期輸出1.無(wú)法結(jié)算2成功結(jié)算3.成功清空實(shí)際輸出1.無(wú)法結(jié)算2成功結(jié)算3.成功清空測(cè)試結(jié)論通過(guò)商品成功加入購(gòu)物車,如圖6-3所示。圖6-3加入購(gòu)物車6.4商品訂單測(cè)試測(cè)試情況如表6-4所示。表6-4商品訂單結(jié)算測(cè)試測(cè)試內(nèi)容商品訂單結(jié)算輸入操作1.訂單未支付2.訂單已支付3.確認(rèn)收貨預(yù)期輸出1.無(wú)法完成2成功發(fā)貨3.訂單已完成實(shí)際輸出1.無(wú)法完成2成功發(fā)貨3.訂單已完成測(cè)試結(jié)論通過(guò)商品訂單已完成,如圖6-4所示。圖6-4商品訂單6.5管理員功能測(cè)試用戶管理功能測(cè)試,測(cè)試情況如表6-5所示。表6-5用戶管理測(cè)試測(cè)試內(nèi)容用添加、編輯、查詢、修改功能輸入操作1.按要求輸入添加用戶信息2.在管理用戶列表中,管理員可以查詢、編輯和修改信息預(yù)期輸出1.添加成功2.操作成功實(shí)際輸出1.添加成功2.操作成功測(cè)試結(jié)論通過(guò)用戶管理測(cè)試已完成,如圖6-5所示。圖6-5用戶管理6.6測(cè)試總結(jié)經(jīng)過(guò)對(duì)上述的測(cè)試結(jié)果分析,本系統(tǒng)基本滿足了球鞋線上商城的需求。所有基本功能齊全,操作簡(jiǎn)單,產(chǎn)品運(yùn)行性能良好,是一個(gè)實(shí)用性、綜合性較強(qiáng)的線上商城系統(tǒng)。
總結(jié)通過(guò)本次畢業(yè)論文的設(shè)計(jì),不僅將大學(xué)四年里面學(xué)到的知識(shí)融會(huì)貫通,還幫助我意識(shí)到了自己的不足。從最初的畢業(yè)論文選題,到網(wǎng)上查看文檔,整理接口參數(shù),再到論文代碼的完成與實(shí)現(xiàn)和最后的論文定稿,這個(gè)過(guò)程讓我體會(huì)到了理論和實(shí)踐相結(jié)合的難度,也讓我了解了只有自己親身經(jīng)歷這個(gè)過(guò)程才能使其印象深刻。本次畢業(yè)論文的設(shè)計(jì)與實(shí)現(xiàn)中對(duì)于系統(tǒng)的優(yōu)缺點(diǎn)做了以下總結(jié),對(duì)于遇到許多問(wèn)題也及時(shí)進(jìn)行了完善和修改,首先本系統(tǒng)的優(yōu)點(diǎn)以方便快捷簡(jiǎn)潔明了為主,用戶登錄本系統(tǒng)可以快速通過(guò)產(chǎn)品分類以及商品的發(fā)售時(shí)間和銷量熱度來(lái)第一時(shí)間找到自己想要的球鞋,通過(guò)球鞋的詳情頁(yè)面及時(shí)的了解本款球鞋的詳情信息包括各個(gè)角度的圖片展示以及球鞋的詳細(xì)介紹使得用戶對(duì)此有一個(gè)全面的了解來(lái)獲得他們想要的商品,在商品結(jié)算的過(guò)程中也沒有多余的繁瑣流程,在用戶加入購(gòu)物車結(jié)算以
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校資助辦管理制度
- 學(xué)生借閱卡管理制度
- 安全及安全管理制度
- 安息堂物業(yè)管理制度
- 完善公物倉(cāng)管理制度
- 定額員日常管理制度
- 實(shí)訓(xùn)室規(guī)范管理制度
- 客戶退貨處管理制度
- 客運(yùn)部安全管理制度
- 家族接待部管理制度
- 2025至2030中國(guó)執(zhí)法系統(tǒng)行業(yè)經(jīng)營(yíng)效益及前景運(yùn)行態(tài)勢(shì)分析報(bào)告
- 2025年廣東省萬(wàn)閱大灣區(qū)百校聯(lián)盟中考二模語(yǔ)文試題(含答案)
- 【藝恩】出游趨勢(shì)洞察報(bào)告
- 護(hù)士理論考試試題及答案
- 學(xué)生因病缺課管理制度
- 2025年江蘇省蘇州園區(qū)星海中考英語(yǔ)二模試卷
- 福建省廈門市2023-2024學(xué)年高一下學(xué)期期末質(zhì)量檢測(cè)歷史試題(解析版)
- 四川省成都市西川中學(xué)2025年八年級(jí)英語(yǔ)第二學(xué)期期末檢測(cè)模擬試題含答案
- 工程項(xiàng)目經(jīng)理競(jìng)聘演講稿
- 天津水務(wù)集團(tuán)有限公司招聘考試真題2024
- 《Linux系統(tǒng)安全》課件
評(píng)論
0/150
提交評(píng)論