python-django電商項目需求分析python
1.用戶模塊mysql
1)註冊頁sql
2)登陸頁數據庫
3)用戶中心django
4)其餘後端
因此這個模塊有5個頁面緩存
2.商品相關服務器
1)首頁session
2)商品詳情頁架構
3)商品列表頁
4)其餘
因此這個模塊有四個頁面:
3.購物車相關
因此這個模塊就只有一個頁面:
4.訂單相關
因此這個模塊就只有一個頁面:
####################################################################
架構設計的注意點:
注意1:先後端問題
上面都是講的前段的內容,可是除此以外還有後臺管理的頁面,添加商品,管理我網站上面要顯示的內容,
實際的公司裏面開發項目,django有後臺管理的模塊,能夠管理頁面,可是像電商大型的項目,不會使用這個django後臺,會專門開發後臺管理頁面,
那django的後臺何時用?有一個項目你想要很快的作出來,就可使用這個django後臺先搭起來,
或者一個博客,或者作一個新聞類型的網站,你可使用它的後臺管理頁面,
這個項目就是使用的django的後臺管理功能,
注意2:數據庫使用問題
實際開發中都會使用mysql數據庫,這是使用最多的,
可是若是用戶量很是大,會把經常使用的數據,或者是頁面放到緩存裏面,爲何?好比首頁,首頁的商品信息是數據庫來的,可是展現的商品很長時間才動,
若是訪問人很是多,好比1萬人就要從數據庫查1萬次,就太頻繁了,因此會把頁面放到緩存裏面,放到緩存的服務器裏面,
並且用戶來了以後須要存用戶的session信息,若是用戶很是大,你要不停的查數據庫,因此還須要一個session的服務器,提升它的效率,
使用到的緩存數據庫就是Redis數據庫,內存型的數據庫,這就是最經常使用的場景,使用Redis數據庫,做爲咱們的緩存服務器,和session服務器,
注意3:異步任務處理問題
除此以外還須要異步的任務處理,好比註冊以後,發送給用戶一個郵件,這種比較耗時,就須要一個異步的任務處理,使用celery來異步處理這種耗時的任務,
註冊以後,交給celery發郵件,不該該用戶操做頁面,該幹什麼幹什麼,就體驗很好,
注意4:分佈式文件存儲問題
除此以外還涉及到商品的圖片,對於一個大型的網站,涉及到不少的商品圖片,django自己上傳圖片,它的效率是很低的,
在咱們的這個項目中,就再也不使用django默認的這個圖片上傳的處理,咱們使用一個分佈式文件儲存系統,幫助咱們存儲圖片,
這個系統叫fastdfs,這個分佈式文件存儲系統是一個淘寶的使用的一個系統,後來開源了,後來不少的電商網站就使用這個系統,
######################################################################################
數據庫設計
這是很是重要的一環
用戶表:ID,用戶名,密碼,郵箱,激活標識(表示用戶是否被激活),權限標識(由於你要把管理員和普通用戶放在一張表)
地址表:ID,收件人,收件地址,郵編,聯繫方式,是否默認(默認收貨地址),用戶ID(和用戶是1對多的)
商品SKU表:ID,名稱,簡介,價格,單位,庫存,銷量(不放這也能夠計算出來,可是按照人氣排序,就是使用銷量,能夠減小關聯的操做,就不用統計了,)
商品詳情,圖片(仍是要記錄一張,不然每次都要連表查效率低,這就是以空間換時間),狀態(上下架),SPUID,種類ID,
商品SPU表:ID,名稱,詳情,
商品種類表:ID,種類名稱,logo(這是種類前面的小logo),圖片(這是種類的展現圖片)
商品圖片表:ID,圖片,SKUID(和商品一對多,一個商品有多個圖片)
首頁輪播商品表:ID,SKUID(你是輪播的哪個商品),圖片(這是一個大banner),index(能夠控制展現的順序)
首頁促銷活動表:ID,活動圖片,活動的url地址(跳轉的可能不是一個商品,而是一個活動地址),index(能夠控制展現的順序)
首頁分類商品展現表:ID,SKUID(我要展現哪個商品),種類ID,index(能夠控制展現的順序),展現標識(好比1是展現成圖片,0是展現成標題)
購物車功能:Redis實現購物車功能,並不打算建一個表,由於每次點擊加商品和減商品,都要操做數據庫,驗證庫存,這樣可使用Redis緩存,
可是我有疑問,爲何每次都要去校驗呢?體驗好,否則就是你要在提交的時候才知道庫存不足,
至於怎麼使用Redis放數據,實現購物車的功能,後續再說,
訂單信息表:ID,訂單ID,收穫地址ID,用戶ID(誰下的單),支付方式,商品的總數目(根據運營需求來,加上能夠利於分析數據,不加也能夠),
總金額(能夠不加,可是加上有利於分析數據),運費,支付狀態,訂單建立時間,
訂單商品表:ID,訂單ID,SKUID,商品數量,商品價格(由於價格會變更,因此必定要記錄),訂單和商品是一對多,一個訂單能夠多個商品,評論
用戶瀏覽歷史記錄:仍是保存在Redis數據庫中,
因此設計表的時候有一個套路,就是一旦發現有一對多的關係,就要分紅兩個表,
表在設計以前是須要仔細斟酌的,不可能今天該,明天該,不會頻繁變更,
-------------------------------------------
電商裏面SKU與SPU概念
SPU = Standard Product Unit (標準產品單位)
SPU 是商品信息聚合的最小單位,是一組可複用、易檢索的標準化信息的集合,該集合描述 了一個產品的特性。通俗點講,屬性值、特性相同的商品就能夠稱爲一個 SPU。
例如:iphone7 就是一個 SPU,與商家,與顏色、款式、套餐都無關。
SKU=stock keeping unit(庫存量單位)
SKU 即庫存進出計量的單位, 能夠是以件、盒、托盤等爲單位。
SKU 是物理上不可分割的最小存貨單元。在使用時要根據不一樣業態,不一樣管理模式來處理。 在服裝、鞋類商品中使用最多最廣泛。
例如:紡織品中一個 SKU 一般表示:規格、顏色、款式。
舉例:iPhone7是一個SPU,可是白色iPhone7是一個sku,黑色iPhone7也是一個sku,
######################################################################################
項目框架搭建
我須要本身實現這個項目搭建
1,新建django項目,使用命令行建立沒有templates這個文件夾,須要手動建立,
2,一個模塊就有一個應用app,因此有四個app,
3,項目配置:app配置,數據庫配置,語言時區配置,templates路徑配置,static路徑配置,
查看Django的版本,能夠直接在控制檯進入Python解釋器,輸入print(django.VERSION),或者輸入python -m django --version,均可以實現查看Django版本。
D:\AI\dailyfresh>python -m django --version
File——Setting——project:項目名——project interpreter——雙擊Django,勾選Specify 再右邊下拉選須要的版本,最後Install Package就能夠了
4,開始url編寫對應關係,這個url的地方最好使用反向解析的方式,這樣改動路徑不用大量更改代碼
5,定義一個db/base_model.py的文件,一個數據表的基類,給每個表增長三個字段,
6,按照一個富文本編輯器,pip install django-tinymce
7,配置文件加上一句:
# 加上這句表裏的字段都是同樣的,就是不在使用django提供的auth_user表,並且使用本身的,
AUTH_USER_MODEL = 'user.User'
這樣基本的項目框架就搭好了,
注意:
在新版本Django2.x中,url的路由表示用path和re_path代替,
模塊的導入由django1.x版本的
from django.conf.urls import url,include
變成如今的Django2.x中的
from django.urls import path, re_path, include