天天生鲜项目总结
跟著視頻做的天天生鮮web項(xiàng)目告一段落了,做個(gè)總結(jié)
技術(shù)棧:python,django,mysql,redis
1、天天項(xiàng)目是生鮮類(lèi)產(chǎn)品 B2C PC端網(wǎng)站,包括四大模塊
2、功能模塊:用戶(hù)模塊,商品模塊,購(gòu)物車(chē)模塊,訂單模塊
3、用戶(hù)模塊:注冊(cè),激活,登錄,退出,個(gè)人中心,地址頁(yè)面
4、商品模塊:首頁(yè),詳情頁(yè)面,列表頁(yè)面,搜索(hasystack+whoosh)
5、購(gòu)物車(chē)模塊:增加,修改,刪除,查詢(xún)
6、訂單模塊:確認(rèn)訂單頁(yè),訂單創(chuàng)建(下單),請(qǐng)求支付,查詢(xún)支付結(jié)果,評(píng)論
7、django默認(rèn)的用戶(hù)認(rèn)證模型類(lèi)AbstractUser:
django默認(rèn)是有用戶(hù)模型類(lèi)的,當(dāng)需要自己定義用戶(hù)模型類(lèi)時(shí),讓這個(gè)模型類(lèi)去繼承django自帶的AbstractUser類(lèi),就可以使用django用戶(hù)認(rèn)證系統(tǒng)的所有方法,如常用的create_User,authenticate,login,logout,is_authenticated,login_required裝飾器(沒(méi)登陸的話(huà)記得改為跳轉(zhuǎn)到登陸界面)。最后一定要記住去項(xiàng)目的settings文件中把django的認(rèn)證系統(tǒng)使用的模型類(lèi)AUTH_USER_MODEL改為"user.User"。
開(kāi)發(fā)的時(shí)候普遍的原則:當(dāng)前端訪(fǎng)問(wèn)你的某一個(gè)地址之后,如果前端攜帶了數(shù)據(jù),你首先應(yīng)該對(duì)這些數(shù)據(jù)進(jìn)行接收,接收完后進(jìn)行校驗(yàn)(防止非法請(qǐng)求),緊接著核心業(yè)務(wù)處理,處理完后給他返回應(yīng)答。
8、itsdangerous(使用dumps方法對(duì)user_id進(jìn)行加密)生成簽名的token,并把用戶(hù)的token加到激活鏈接傳給激活視圖使用loads解密
9、發(fā)郵件 (django提供郵件支持,send_mail)但是你得用celery去完成
10、celery異步隊(duì)列:把代碼中一些耗時(shí)的操作交給異步隊(duì)列做,代碼正常往下執(zhí)行發(fā)出者發(fā)出任務(wù),broker生成任務(wù)隊(duì)列,worker監(jiān)聽(tīng)任務(wù)隊(duì)列。啟動(dòng)worker:celery -A celery_tasks.tasks worker -l info
11、頁(yè)面靜態(tài)化 (celery,nginx)
把原本動(dòng)態(tài)的頁(yè)面處理結(jié)果保存成html文件,讓用戶(hù)直接訪(fǎng)問(wèn)這個(gè)隨管理員修改動(dòng)態(tài)生成出來(lái)的靜態(tài)html頁(yè)面,因?yàn)殡娚叹W(wǎng)站的商品修改更頻繁,所以后臺(tái)管理類(lèi)是商品模塊的admin文件。
12、數(shù)據(jù)緩存cache(保存的位置,有效期,與數(shù)據(jù)庫(kù)的一致性問(wèn)題):將處理的結(jié)果先臨時(shí)保存在redis,下次使用的時(shí)候可以先直接使用,如果沒(méi)有這個(gè)備份數(shù)據(jù),再去查詢(xún)r(jià)edis。
**頁(yè)面靜態(tài)化和數(shù)據(jù)緩存本質(zhì)就是減少對(duì)數(shù)據(jù)庫(kù)的查詢(xún)次數(shù),一定程度防止網(wǎng)站DDOS惡意攻擊,即網(wǎng)站性能的優(yōu)化。
**
13、django二次開(kāi)發(fā)對(duì)接fastdfs:修改django默認(rèn)的文件存儲(chǔ)系統(tǒng),更改django上傳文件行為(自定義文件存儲(chǔ)類(lèi)),要配置你的存儲(chǔ)類(lèi)為這個(gè)類(lèi)
14、商品搜索(whoosh 索引 分詞:替換為jieba)
15、購(gòu)物車(chē) redis 哈希存儲(chǔ) 歷史記錄 redis list存儲(chǔ):
redis保存用戶(hù)的購(gòu)物車(chē)記錄:點(diǎn)擊加入購(gòu)物車(chē)添加,訪(fǎng)問(wèn)購(gòu)物車(chē)頁(yè)面時(shí)從redis中獲取給前端顯示,用hash存儲(chǔ)每一個(gè)用戶(hù)的購(gòu)物車(chē)記錄,統(tǒng)計(jì)hash中的元素?cái)?shù)量用hlen
用戶(hù)的歷史瀏覽記錄使用redis存儲(chǔ),使用list類(lèi)型,每個(gè)用戶(hù)的歷史瀏覽記錄用一個(gè)list數(shù)據(jù)來(lái)存儲(chǔ),并且在左側(cè)插入,保持最新在用戶(hù)訪(fǎng)問(wèn)某個(gè)商品詳情頁(yè)時(shí)添加。
16、ajax都是放在jquery中向后端發(fā)起請(qǐng)求。不會(huì)放在原生js中
17、事務(wù)
18、高并發(fā)的庫(kù)存問(wèn)題(悲觀鎖、樂(lè)觀鎖):
防止賣(mài)出的商品多于庫(kù)存,沖突少用樂(lè)觀,沖突多用悲觀。
19、商品首頁(yè),詳情頁(yè),列表頁(yè)這三個(gè)頁(yè)面有一個(gè)共同的特點(diǎn):都不涉及到數(shù)據(jù)的修改,都是從數(shù)據(jù)庫(kù)里面把信息查出來(lái),在頁(yè)面做一個(gè)遍歷的顯示,動(dòng)態(tài)給遍歷出來(lái)的對(duì)象增加屬性來(lái)存儲(chǔ)查詢(xún)出來(lái)的數(shù)據(jù)
20、前后端交互一定要有這些意識(shí):
確定前端是否要給后端傳遞數(shù)據(jù),傳遞什么數(shù)據(jù),什么格式
確定前端訪(fǎng)問(wèn)的方式:表單(post還是get),ajax(post還是get))
確定后端返回給前端什么數(shù)據(jù),什么格式
jquery比較重要的就是ajax請(qǐng)求,涉及到和后端交互的那一塊
21、訂單支付:對(duì)接支付寶:
用戶(hù)在用戶(hù)訂單中心點(diǎn)擊去付款,前端ajax post方式把訂單id傳到后端,后端處理,調(diào)用支付寶支付接口,支付寶平臺(tái)返回支付寶頁(yè)面地址,后端把這個(gè)url返回給前端,前端引導(dǎo)用戶(hù)到這個(gè)url的頁(yè)面,用戶(hù)登錄付款,
最后還要加上一個(gè)用戶(hù)查詢(xún)訂單支付結(jié)果的業(yè)務(wù)視圖,還是要調(diào)用支付寶的查詢(xún)接口,支付寶平臺(tái)返回支付結(jié)果,再給用戶(hù)顯示出來(lái)。
22、項(xiàng)目部署:(uwsgi作為服務(wù)器 nginx 負(fù)載均衡并提供靜態(tài)文件)
部署不是開(kāi)發(fā)人員做的事,有專(zhuān)門(mén)的運(yùn)維人員。
總結(jié)
- 上一篇: Mysql中int(M)的含义
- 下一篇: 女生学医检好还是学计算机好,女生学医选择