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)
Django 购物车模板的更多相关文章
- Django的模板层
一 模版简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now ...
- python学习笔记--Django入门二 Django 的模板系统
为了使网站更干净简洁更容易维护,页面的设计和Python的代码必须分离开.我们可以使用Django的 模板系统 (Template System)来实现这种模式. 几个简单的模板标签(tag): ...
- 第四章:Django 的模板系统(转)
在之前的章节中,你可能觉得例子中视图返回文本有点不妥.即是, HTML 是直接写在 Python 代码中的. 这种做法会导致这些问题: 要做任何设计上的更改就必须改写 Python 代 ...
- Django使用模板后无法找到静态资源文件
Django使用模板后无法找到静态资源文件 环境配置 Django版本1.11 python版本3.6.2 前言 在编写Django网站的时候,在涉及模板方面,一些简单的例子都没有问题,但这些例子都有 ...
- django的模板(二)
模板(二) 实验简介 本节继续介绍模板的常用标签,for.if.ifequal和注释标签. 一.基本的模板标签和过滤器 1. 标签 if/else {% if %} 标签检查(evaluate)一个变 ...
- django之模板显示静态文件
由于django的模板渲染机制,图片不能直接引用,否则不会显示. <img src="/static/img/logo.jpg"> 可以看出图片的大小轮廓,但并不显示内 ...
- Django之模板系统
变量的使用: def test(request): num=1 s='hello' li=[1,2,['a','b']] dic={'name':'w','age':1} se={1,2,3} tup ...
- django默认模板引擎和jinja2模板引擎
在使用中,大家会发现django默认模板引擎有很多局限性,最明显的就是四则运算.就只能加减,乘除都不支持.另外还有判断相等,不能直接if,要用ifequal.确实不太方便.还有一点,django默认模 ...
- Django之模板
Django模板系统 官方文档 常用语法 Django模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ ...
随机推荐
- JAVA基础系列:Arrays.binarySearch二分查找
首先,binarySearch方法为二分法查找,所以数组必须是有序的或者是用sort()方法排序之后的 1) binarySearch(Object[] a, Object key) a: 要搜索的 ...
- idea找不到tomcat,找不到Tomcat server
打开settings 添加即可 如果再没有,可能需要先安装timcat插件
- logstash output时区差8个小时
logstash版本6.3.2,解决方式如下,不需要修改源码: input { redis { host => "127.0.0.1" port => " p ...
- Python 发送企业微信消息
1.获取企业微信信息 1)我的企业 --> 企业信息 --> 企业ID 2)创建一个应用,记录该应用的 AgentId.Secret 2.python代码 #!/usr/bin/env p ...
- 记一次ssh.exec_command(cmd)执行后读取结果为空
# 连接跳板机,执行插标签 def con_tmp_machine(mobile_phoneno, myguid): keyfile = os.path.expanduser('/Users/kusy ...
- Field redisTemplate in xxxxxx required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.
*************************** APPLICATION FAILED TO START *************************** Description: Fie ...
- Dart面向对象编程(二)
继承: person.dart: class Person{ String name; int age; String _birthday; bool get isAdult => age &g ...
- 【题解】宫廷守卫 [P1263]
[题解]宫廷守卫 [P1263] 传送门:宫廷守卫 \([P1263]\) [题目描述] 给出一个 \(n*m\) 的方格图,分别用整数 \(0,1,2\) 表示空地.陷阱.墙,空地上可以放置守卫,如 ...
- golang学习笔记 --flag
概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对 ...
- Canon MF113W激光打印机双面打印方法
系统:macOS 10.14.3 打印机:Canon MF113W 黑白激光打印机(不支持自动双面打印) 方法: 1)文件->打印->纸张处理->仅奇数页->倒序->打印 ...