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)

原文地址:https://www.cnblogs.com/Rivend/p/12077796.html

时间: 2024-11-02 10:11:07

Django 购物车模板的相关文章

Django的模板系统

模板系统介绍 模板系统的组成:HTML代码和逻辑控制代码 逻辑控制代码可以理解是django模板语言 django的模板语言组成 变量(使用双大括号来引用变量): 标签(tag)的使用(使用大括号和百分比的组合来表示使用tag) 模板继承 模板语言之变量 语法: {{var_name}} var_name 指变量名 使用模板语言之前: 先介绍template对象和Context对象 进入django的项目的交互环境 python manange.py shell >>> from dja

第四章:Django 的模板系统(转)

在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的. 这种做法会导致这些问题: 要做任何设计上的更改就必须改写 Python 代码.网站的设计风格的更变一般来说会比更改后台的 Ptyhon 代码来得频繁,因此如果能够更改设计而不用更改 Python 变得尤为方便. 2 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成.设计人员和 HTML/CSS 编写人员都不应

Django使用模板进行动态局部刷新

想学习python,但是找不到方向,最近想突然对web编程感兴趣了,所有一直在看,刚刚对着教程做了一点东西. 使用Django提交评论时,如果使用Form提交评论信息,那么提交成功后,最好是能把刚刚输入的评论信息显示出来: 所以提交评论信息后,最好能马上将评论内容显示出来. 当时考虑了3种方法: 1.最开始考虑使用Ajax+json,从服务器读取最新的一条评论信息,当多个用户同时提交评论的时候,这种办法会出现不同步的现象,pass掉: 2.还是使用Ajax+json,客户端传递当前页面的评论数量

Django 自定义模板标签和过滤器

1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py . views.py 等处于同一层次.例如: books/     __init__.py     models.py     templatetags/     views.py 在 templatetags 中创建两个空文件:一个 __init__.py (告诉Python这是一个包含了Python代码的包)和一个用来存放你自定义的

实习生的Django[2](模板)

快要下班了,今天研究了一整天日文翻译(我的项目与日文息息相关阿),累得要死,在下班之前偷偷总结一下今天学的Django. 因为不能花很多时间去学Django,要均衡-所以今天就之做了一下模板. 因为上一次写的[1]说的视图,今天很自然就开始作模板了. 什么叫模板? 玩过C++的人都知道(c++三宝:template,stl,class),但是为了博文看起来好像作者有在写,我就用简单地话解释一下:我们面试都非常讨厌自我介绍(好像面试官不会看简历的样子?),为此我只能将:我叫XXX,来自XXX,特长

python django -4 模板

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序

Django中模板总结[模板语言,模板继承,CSRF攻击,反向解析]

模板 概述 作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器.模版致力于表达外观,而不是程序逻辑.模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用. 创建模板文件夹 在项目的文件里面定义一个templates文件夹 在创建的文件夹里面再创建一个文件夹为每个应用的html文件夹 起名为和应用名同名的文

django 自定义模板过滤器

参考:http://www.cnblogs.com/qwj-sysu/p/4246605.html 做的页面,一个tr里有两个td, 1.3.5等奇数数据要放在第一个td, 2.4.6等偶数数据要放在第二个td, (如果已经没有数据,td 内容要为空), 所以要根据取余数的结果来判断; 但django的模板没有取余操作,只好自定义一个 django的模板配置在:setting.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.djan

Django之模板层

前面学习了Django的下载和基础的操作,掌握了其基本框架,接下来我们来学习Django中的模板语法. 学习任务:知道什么是模板,以及html+模板语法的具体用法 python的模板:HTML代码+模板语法 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的标签. #原始的视图 def timeHandle(request): import datetime t=datetime.datetime.now() #Django修改后的视图 # 方式1: # return HttpRespons