1. 程式人生 > >對購物車模組的理解

對購物車模組的理解

購物車增加

請求方式 post

請求引數  sku_id,count,selected

引數 型別 是否必須 說明
sku_id int 商品sku id
count int 數量
selected bool 是否勾選,預設勾選

返回引數  sku_id,count,selected  

引數 型別 是否必須 說明
sku_id int 商品sku id
count int 數量
selected bool 是否勾選,預設勾選

 

購物車資料讀寫比較頻繁,對於已登入使用者可以儲存在redis中。對於未登入使用者可儲存在cookie中。

redis儲存已登入使用者

說明:

  1. 每個使用者可以儲存多個商品與其數量對應,所以選擇redis雜湊型別儲存
  2. 對於勾選狀態,只需要儲存已勾選商品的sku_id,不要求有序,不重複。所以選擇redis的set型別儲存

cook儲存未登入使用者

{
    sku_id: {
        "count": xxx,  // 數量
        "selected": True  // 是否勾選
    },
    sku_id: {
        "count": xxx,
        "selected": False
    },
    ...
}

 

cookie中只能儲存字串,可以使用pickle將上面的資料型別序列化為bytes型別,因為它序列化速度比json要高。

將序列化得結果進行base64編碼得到的仍然是bytes再進行encode的到str 設定到cookie中

 

購物車查詢

請求方式  get  /cart/

返回資料

引數 型別 是否必須 說明
id int 商品sku id
count int 數量
selected bool 是否勾選,預設勾選
name str 商品名稱
default_image_url str 商品預設圖片
price decimal 商品單價

檢視的業務邏輯

  1. 判斷使用者登入狀態
  2. 登入使用者從redis中查詢加入購物車的商品
  3. 未登入使用者從cookie中獲取加入購物車的shangpin
  4. 從mysql sku表中查詢商品(獲取圖片,價格等資訊)
  5. 序列化後返回給前端

修改購物車資料

請求方式 : PUT /cart/

請求引數: JSON 或 表單

引數 型別 是否必須 說明
sku_id int 商品sku id
count int 數量
selected bool 是否勾選,預設勾選

返回資料: JSON

引數 型別 是否必須 說明
sku_id int 商品sku id
count int 數量
selected bool 是否勾選,預設勾選

 需要更新的資料只有 數量和勾選狀態

業務邏輯:

  1. 將接收的資料進行反序列化(驗證資料的合法性)
  2. 判斷使用者登入狀態
  3. 登入使用者從更新對應redis中的資料
  4. 未登入使用者更新cookie資訊