Django 购物车模板

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)

 

猜你喜欢

转载自www.cnblogs.com/Rivend/p/12077796.html