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模板中只需要记两种特殊符号: {{ }}和 {% %} {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作. 变量 {{ ...
随机推荐
- pgsql_pg的数据类型
PostgreSQL 提供了丰富的数据类型.用户可以使用 CREATE TYPE 命令在数据库中创建新的数据类型.PostgreSQL 的数据类型被分为四种,分别是基本数据类型.复合数据类型.域和伪类 ...
- linux _文件目录与权限
1. 目录相关 . 代表次层目录 .. 代表上一层目录 - 代表前一个工作目录 ~ 代表目前使用者身份所在home目录 ~account 代表account这个使用者的home目录 cd 切换目录(c ...
- 阿里云RDS数据库备份同步到自建库方法(SHELL脚本)
一.背景: 由于阿里云RDS生产库每天都需要备份且拷贝到自建读库,而如果使用阿里云的自动拷贝到只读实例, 费用太高, 故采用自编写同步脚本方法实现. 二.前提: 1). 已开通阿里云RDS, 且开启定 ...
- Sitecore A / B测试
测试您的Web内容非常重要.这是查看页面中的页面和组件是否达到预期效果的好方法.测试还可以让您放心,您的内容足够吸引人,以增加转化次数并最大限度地提高增长率. 测试如何运作? 测试通过向访问者随机显示 ...
- Window 远程桌面漏洞风险,各个厂家的扫描修复方案(CVE-2019-0708)
自微软公司于2019年5月14日发布远程桌面服务远程代码执行漏洞(CVE-2019-0708)安全公告后,整个业界都一直在密切关注,这个漏洞编号必将在当今网络中掀起腥风血雨.各大厂商也纷纷推出自己的修 ...
- Spring+Mybatis动态切换数据源
功能需求是公司要做一个大的运营平台: 1.运营平台有自身的数据库,维护用户.角色.菜单.部分以及权限等基本功能. 2.运营平台还需要提供其他不同服务(服务A,服务B)的后台运营,服务A.服务B的数据库 ...
- Fluentvalidation的基本使用
前言: fluentvalidation用于构建强类型验证规则的流行.NET库.方便好用快捷省心!!! 本文按照官方文档进行试验,如果深(不)入(看)的(我)研(写)究(的)请去官网:https:// ...
- mysql解决Fatal error encountered during command execution. 500内部错误
Asp.net 连接mysql 会出现Fatal error encountered during command execution.的错误 解决办法如下: 连接字符串添加 Allow User ...
- 微信页面script标签添加crossorigin=“anonymous”导致页面加载失败
公司一个微信企业号项目,突然出现页面数据加载失败,页面报错信息如下 意思是前端向服务端发送跨域资源请求访问这个js文件,但是服务端并不同意,所以服务端拒绝访问这个地址. 后来发现将crossorigi ...
- English--介词省略句型与总结
English|介词省略句型与总结 本篇文章将会介绍介词的省略与整个语法内容的总结.小板凳都带上,准备开始了! 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点的描述.力求不含任 ...