url
from django.contrib import admin from django.urls import path, re_path from django.urls import include urlpatterns = [ re_path(r‘^admin/‘, admin.site.urls), re_path(‘^api/(?P<version>[v1|v2]\w+)/‘, include(‘app01.urls‘)), ]
from django.urls import path, re_path from django.urls import include from app01.views import account, coursehost, newspapers, shoppingcar urlpatterns = [ re_path(‘login/$‘, account.LoginView.as_view()), re_path(‘course/$‘, coursehost.CourseView.as_view({"get": "list"})), re_path(‘course/(?P<pk>\d+)/$‘, coursehost.CourseView.as_view({"get": "retrieve"})), re_path(r‘coursecategory/$‘, coursehost.CourseCategoryView.as_view({‘get‘: ‘list‘})), re_path(r‘shoppingcar/$‘, shoppingcar.ShoppingCarViewSet.as_view()), ]
视图:
""" * coding: utf-8 CreateTime:2019/12/20 Version: v1 DocName: shoppingcar.py Edit: Riven Effect: shoppingcar data SourceStorageLocation: RivenShop / app01 / views / Shoppingcar.py Modify and add function record: ModifyTime: 1. 2. Add function Time : 1. 2. """ from app01 import models from utils.response import TokenAuth from utils.response import BaseResponse from utils.exception import PricePolicyIncalid from rivenshop import settings import json from rest_framework.views import APIView from rest_framework.response import Response from django_redis import get_redis_connection from django.core.exceptions import ObjectDoesNotExist class ShoppingCarViewSet(APIView): authentication_classes = [TokenAuth, ] conn = get_redis_connection(‘default‘) def post(self, request, *args, **kwargs): """ add course the ShoppingCar :param request: :param args: :param kwargs: :return: """ ret = BaseResponse() try: # 1. acquire user submit Course ID with PriceTactics ID course_id = int(request.data.get(‘courseid‘)) policy_id = int(request.data.get(‘policyid‘)) # 2. acquire course ID course = models.Course.objects.get(id=course_id) # 3.acquire course all PriceTactics price_policy_list = course.price_policy.all() price_policy_dict = {} for item in price_policy_list: price_policy_dict[item.id] = { "period": item.valid_period, "period_display": item.get_valid_period_display(), "price": item.price, } print(price_policy_dict) # 4. estimate submit data whether legitimate if policy_id not in price_policy_dict: # return error PriceTactics illegal raise PricePolicyIncalid("价格策略不合法") # 5.ShoppingCar msg add redis car_key = settings.SHOPPING_CAR_KEY % (request.auth.user_id, course_id) car_dict = { "titile": course.name, "img": course.course_img, "default_policy": policy_id, "policy": json.dumps(price_policy_dict) } self.conn.hmset(car_key, car_dict) ret.data = "添加成功" except PricePolicyIncalid as e: ret.code = 2001 ret.error = e.msg except ObjectDoesNotExist as e: ret.code = 2001 ret.error = "课程不存在" except Exception as e: ret.code = 1001 ret.error = "获取购物车失败" return Response(ret.dict) def delete(self, request, *args, **kwargs): """ Delete ShoppingCar course :param request: :param args: :param kwargs: :return: """ ret = BaseResponse() try: course_id_list = request.data.get("courseids") key_list = [settings.SHOPPING_CAR_KEY % (request.auth.user_id, course_id,) for course_id in course_id_list] self.conn.delete(*key_list) except Exception as e: ret.code = 1002 ret.error = "删除失败" return Response(ret.dict) def patch(self, request, *args, **kwargs): """ Modification PriceTactics for course :param request: :param args: :param kwargs: :return: """ ret = BaseResponse() try: # 1.acquire PriceTactics ID with course ID course_id = int(request.data.get("courseid")) policy_id = str(request.data.get("policyid")) # 2.joint the course key key = settings.SHOPPING_CAR_KEY % (request.auth.user_id, course_id,) if not self.conn.exists(key): ret.code = 1002 ret.error = "购物车中不存在此课程" return Response(ret.dict) # 3. Acquire PriceTactics data all for redis policy_dict = json.loads(str(self.conn.hget(key, "policy"), encoding=‘utf-8‘)) if policy_id not in policy_dict: ret.code = 1003 ret.error = "价格策略不合法" return Response(ret.dict) print(key) # 4.Modification ShoppingCar Course PriceTactics self.conn.hset(key, ‘default_policy‘, policy_id) ret.data = "修改成功" print(456464165) except Exception as e: ret.code = 1004 ret.error = "修改失败" return Response(ret.dict) def get(self, request, *args, **kwargs): """ see ShoppingCar all data :param request: :param args: :param kwargs: :return: """ ret = BaseResponse() try: key_match = settings.SHOPPING_CAR_KEY % (request.auth.user_id, "*") course_list = [] for key in self.conn.scan_iter(key_match, count=10): print(key) info = { "title": self.conn.hget(key, ‘titile‘).decode(‘utf-8‘), "img": self.conn.hget(key, ‘img‘).decode(‘utf-8‘), "policy": json.loads(self.conn.hget(key, ‘policy‘).decode(‘utf-8‘)), "default_policy": self.conn.hget(key, ‘default_policy‘).decode(‘utf-8‘) } course_list.append(info) ret.data = course_list except Exception as e: ret.code = 1002 ret.error = "获取失败" return Response(ret.dict)
原文地址:https://www.cnblogs.com/Rivend/p/12077796.html
时间: 2024-11-02 10:11:07