對購物車模組的理解
阿新 • • 發佈:2018-12-01
購物車增加
請求方式 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儲存已登入使用者
說明:
- 每個使用者可以儲存多個商品與其數量對應,所以選擇redis雜湊型別儲存
- 對於勾選狀態,只需要儲存已勾選商品的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 | 是 | 商品單價 |
檢視的業務邏輯
- 判斷使用者登入狀態
- 登入使用者從redis中查詢加入購物車的商品
- 未登入使用者從cookie中獲取加入購物車的shangpin
- 從mysql sku表中查詢商品(獲取圖片,價格等資訊)
- 序列化後返回給前端
修改購物車資料
請求方式 : PUT /cart/
請求引數: JSON 或 表單
引數 | 型別 | 是否必須 | 說明 |
---|---|---|---|
sku_id | int | 是 | 商品sku id |
count | int | 是 | 數量 |
selected | bool | 否 | 是否勾選,預設勾選 |
返回資料: JSON
引數 | 型別 | 是否必須 | 說明 |
---|---|---|---|
sku_id | int | 是 | 商品sku id |
count | int | 是 | 數量 |
selected | bool | 是 | 是否勾選,預設勾選 |
需要更新的資料只有 數量和勾選狀態
業務邏輯:
- 將接收的資料進行反序列化(驗證資料的合法性)
- 判斷使用者登入狀態
- 登入使用者從更新對應redis中的資料
- 未登入使用者更新cookie資訊