qhfl-6 购物车
生活随笔
收集整理的這篇文章主要介紹了
qhfl-6 购物车
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
購物車中心
用戶點擊價格策略加入購物車,個人中心可以查看自己所有購物車中數據
在購物車中可以刪除課程,還可以更新購物車中課程的價格策略
所以接口應該有四種請求方式, get,post,patch,delete
購物車是屬于中間狀態數據,而且很多時候需要過期時間,所以我們選擇redis
讀取速度快,并且redis可以做持久化,支持的數據類型也比較多。
要點:將購物車數據組織放到reids中,reids的增刪改查對應http的四種請求方法 。對購物車操作前需驗證。
加入購物車接口
# 前端傳過來的數據結構 { course_id , price_policy_id} # 把購物車數據放入redis中的結構 """ {SHOPPINGCAR_USERID_COURSE_ID: {"id", "title","course_img","price_policy_dict": {price_policy_id: "{valid_period, price}"price_policy_id2: "{valid_period, price}"price_policy_id3: "{valid_period, price}" },"default_price_policy_id": 1?? } } """ """購物車接口1010 代表成功1011 課程不存在1012 價格策略不存在1013 獲取購物車失敗1014 刪除的購物車數據不存在 """ from rest_framework.views import APIView from rest_framework.response import Response from utils.base_response import BaseResponse from utils.my_auth import LoginAuth from utils.redis_pool import POOL from Course.models import Course import json import redisSHOPPINGCAR_KEY = "SHOPPINGCAR_%s_%s" CONN = redis.Redis(connection_pool=POOL)class ShoppingCarView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1, 獲取前端傳過來的數據以及user_idcourse_id = request.data.get("course_id", "")price_policy_id = request.data.get("price_policy_id", "")user_id = request.user.pk# 2, 校驗數據的合法性# 2.1 校驗課程id合法性course_obj = Course.objects.filter(id=course_id).first()if not course_obj:res.code = 1040res.error = "課程id不合法"return Response(res.dict)# 2.2 校驗價格策略id是否合法price_policy_queryset = course_obj.price_policy.all()price_policy_dict = {}for price_policy in price_policy_queryset:price_policy_dict[price_policy.id] = {"price": price_policy.price,"valid_period": price_policy.valid_period,"valid_period_display": price_policy.get_valid_period_display()}if price_policy_id not in price_policy_dict:res.code = 1041res.error = "價格策略id不合法"return Response(res.dict)# 3,構建redisKEYkey = SHOPPINGCAR_KEY % (user_id, course_id)# 4,構建數據結構course_info = {"id": course_obj.id,"title": course_obj.title,"course_img": str(course_obj.course_img),"price_policy_dict": json.dumps(price_policy_dict, ensure_ascii=False),"default_price_policy_id": price_policy_id}# 5 寫入redisCONN.hmset(key, course_info)res.data = "加入購物車成功"return Response(res.dict) 加入購物車接口處理接口測試
查看購物車接口
def get(self, request):res = BaseResponse()# 1, 拼接redis keyuser_id = request.user.pkshopping_car_key = SHOPPINGCAR_KEY % (user_id, "*") # 購物車可能# 2, 去redis中讀取數據# 2.1 匹配所有的keys# 3,構建數據結構展示all_keys = CONN.scan_iter(shopping_car_key) # redis 掃描相似的ret = []for key in all_keys:ret.append(CONN.hgetall(key))res.data = retreturn Response(res.dict)?
更新購物車
更新購物車中課程的價格策略
PUT以及DELETE接口
def put(self, request):# 前端 course_id price_policy_idres = BaseResponse()# 1, 獲取前端傳過來的數據以及user_idcourse_id = request.data.get("course_id", "")price_policy_id = request.data.get("price_policy_id", "")user_id = request.user.pk# 2, 校驗數據的合法性# 2.1 course_id是否合法key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(key):res.code = 1043res.error = "課程id不合法"return Response(res.dict)# 2,2 price_policy_id是否合法price_policy_dict = json.loads(CONN.hget(key, "price_policy_dict"))print(price_policy_dict)if str(price_policy_id) not in price_policy_dict:res.code = 1044res.error = "價格策略不合法"return Response(res.dict)# 3, 更新redis default_price_policy_idCONN.hset(key, "default_price_policy_id", price_policy_id)res.data = "更新成功"return Response(res.dict)刪除購物車的課程
這里可能是一到多個課程,因此將課程id存到一個列表里面
def delete(self, request):# course_list = [course_id, ]res = BaseResponse()# 1 獲取前端傳來的數據以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗course_id是否合法for course_id in course_list:key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(key):res.code = 1045res.error = "課程ID不合法"return Response(res.dict)# 3, 刪除redis數據CONN.delete(key)res.data = "刪除成功"return Response(res.dict) from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from utils.base_response import BaseResponse from utils.my_auth import LoginAuth from utils.redis_pool import POOL from Course.models import Course import json import redis# Create your views here.# 前端傳過來 course_id price_policy_id # 把購物車數據放入redis """ {SHOPPINGCAR_USERID_COURSE_ID: {"id", "title","course_img","price_policy_dict": {price_policy_id: "{valid_period, price}"price_policy_id2: "{valid_period, price}"price_policy_id3: "{valid_period, price}" },"default_price_policy_id": 1 } } """SHOPPINGCAR_KEY = "SHOPPINGCAR_%s_%s" CONN = redis.Redis(connection_pool=POOL)class ShoppingCarView(APIView):authentication_classes = [LoginAuth, ]def post(self, request):res = BaseResponse()# 1, 獲取前端傳過來的數據以及user_idcourse_id = request.data.get("course_id", "")price_policy_id = request.data.get("price_policy_id", "")user_id = request.user.pk# 2, 校驗數據的合法性# 2.1 校驗課程id合法性course_obj = Course.objects.filter(id=course_id).first()if not course_obj:res.code = 1040res.error = "課程id不合法"return Response(res.dict)# 2.2 校驗價格策略id是否合法price_policy_queryset = course_obj.price_policy.all()price_policy_dict = {}for price_policy in price_policy_queryset:price_policy_dict[price_policy.id] = {"price": price_policy.price,"valid_period": price_policy.valid_period,"valid_period_display": price_policy.get_valid_period_display()}if price_policy_id not in price_policy_dict:res.code = 1041res.error = "價格策略id不合法"return Response(res.dict)# 3,構建redisKEYkey = SHOPPINGCAR_KEY % (user_id, course_id)# 4,構建數據結構course_info = {"id": course_obj.id,"title": course_obj.title,"course_img": str(course_obj.course_img),"price_policy_dict": json.dumps(price_policy_dict, ensure_ascii=False),"default_price_policy_id": price_policy_id}# 5 寫入redisCONN.hmset(key, course_info)res.data = "加入購物車成功"return Response(res.dict)def get(self, request):res = BaseResponse()# 1, 拼接redis keyuser_id = request.user.pkshopping_car_key = SHOPPINGCAR_KEY % (user_id, "*")# 2, 去redis中讀取數據# 2.1 匹配所有的keys# 3,構建數據結構展示all_keys = CONN.scan_iter(shopping_car_key)ret = []for key in all_keys:ret.append(CONN.hgetall(key))res.data = retreturn Response(res.dict)def put(self, request):# 前端 course_id price_policy_idres = BaseResponse()# 1, 獲取前端傳過來的數據以及user_idcourse_id = request.data.get("course_id", "")price_policy_id = request.data.get("price_policy_id", "")user_id = request.user.pk# 2, 校驗數據的合法性# 2.1 course_id是否合法key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(key):res.code = 1043res.error = "課程id不合法"return Response(res.dict)# 2,2 price_policy_id是否合法price_policy_dict = json.loads(CONN.hget(key, "price_policy_dict"))print(price_policy_dict)if str(price_policy_id) not in price_policy_dict:res.code = 1044res.error = "價格策略不合法"return Response(res.dict)# 3, 更新redis default_price_policy_idCONN.hset(key, "default_price_policy_id", price_policy_id)res.data = "更新成功"return Response(res.dict)def delete(self, request):# course_list = [course_id, ]res = BaseResponse()# 1 獲取前端傳來的數據以及user_idcourse_list = request.data.get("course_list", "")user_id = request.user.pk# 2 校驗course_id是否合法for course_id in course_list:key = SHOPPINGCAR_KEY % (user_id, course_id)if not CONN.exists(key):res.code = 1045res.error = "課程ID不合法"return Response(res.dict)# 3, 刪除redis數據CONN.delete(key)res.data = "刪除成功"return Response(res.dict) shopping總結
以上是生活随笔為你收集整理的qhfl-6 购物车的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qhfl-5 redis 简单操作
- 下一篇: qhfl-7 结算中心