python-django電商項目-需求分析架構設計數據庫設計_20191115


python-django電商項目需求分析

1.用戶模塊

1)注冊頁

  • 注冊時校驗用戶名是否已被注冊。
  • 完成用戶信息的注冊。
  • 給用戶的注冊郵箱發送郵件,用戶點擊郵件中的激活鏈接完成用戶賬戶的激活。

2)登錄頁

  • 實現用戶的登錄功能。

3)用戶中心

  • 用戶中心信息頁:顯示登錄用戶的信息,包括用戶名、電話和地址,同時頁面下方顯示出用戶最近瀏覽的商品信息。
  • 用戶中心地址頁:顯示登錄用戶的默認收件地址,頁面下方的表單可以新增用戶的收貨地址。
  • 用戶中心訂單頁:顯示登錄用戶的訂單信息。

4)其他

  • 如果用戶已經登錄,頁面頂部顯示登錄用戶的信息。

所以這個模塊有5個頁面

  • 注冊頁
  • 登錄頁
  • 用戶中心-信息頁
  • 用戶中心-地址頁
  • 用戶中心-訂單頁

2.商品相關

1)首頁

  • 動態指定首頁輪播商品信息。
  • 動態指定首頁活動信息。
  • 動態獲取商品的種類信息並顯示。
  • 動態指定首頁顯示的每個種類的商品(包括圖片商品和文字商品)。
  • 點擊某一個商品時跳轉到商品的詳情頁面。

2)商品詳情頁

  • 顯示出某個商品的詳情信息。
  • 頁面的左下方顯示出該種類商品的2個新品信息。

3)商品列表頁

  • 顯示出某一個種類商品的列表數據,分頁顯示並支持按照默認、價格、和人氣進行排序。
  • 頁面的左下方顯示出該種類商品的2個新品信息。

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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM