• 安装模块

    • pip install django-redis
  • 后端代码
# 购物车
class CartView(APIView):
# 初始化函数
def __init__(self):
self.conn = get_redis_connection('default') # 获取购物车信息
def get(self,request):
# 读取数据 (获取前端传来的id)
uid = request.GET.get('id')
key = 'cart_{}'.format(uid) # cart_1
tmp = self.conn.hgetall(key) # {b'a9':b'20',b'a10':b'13'}
if not tmp:
return Response({
"status":201,
"msg":"购物车为空"
})
data = {k.decode('utf-8')[1:]:v.decode('utf-8') for k,v in tmp.items()}
# 如何获取商品Id
goods = models.Goods.objects.filter(id__in=data).all()
data_list = []
datax = {k.decode('utf-8'): v.decode('utf-8') for k, v in tmp.items()} # {'a10': '13', 'a9': '20'}
for good in goods:
gid = good.id
info = {"id":gid,"name":good.name,"store":good.store,"price":float(good.price),"img":good.img,"count":datax.get('a'+str(gid))}
data_list.append(info)
return Response({
"status":200,
"msg": "",
"data":data_list
})
# 添加购物车信息
def post(self,request):
data = request.data
uid = data.get('uid','')
gid = 'a'+ str(data.get('gid',''))
count = data.get('count',0)
# 存入redis
key = 'cart_'+ str(uid)
self.conn.hset(key,gid,count)
return Response({
"msg":"已设置"
}) # 删除购物车信息
def delete(self,request):
uid = request.data.get('uid',"")
gid = request.data.get('gid',"")
key = 'cart_{}'.format(uid)
field = 'a{}'.format(gid)
tmp = self.conn.hdel(key,field)
print(tmp)
return Response({
"msg":""
})
  • 前端
<template>
<div id='cart'>
<div class="total_count">全部商品<em>2</em>件</div>
<ul class="cart_list_th clearfix">
<li class="col01">商品名称</li>
<li class="col03">商品价格</li>
<li class="col04">数量</li>
<li class="col05">小计</li>
<li class="col06">操作</li>
</ul>
<ul class="cart_list_td clearfix" v-for="(i,index) in goods">
<li class="col01"></li>
<li class="col02"><img :src="src+i.img"></li>
<li class="col03">{{i.name}}</li>
<li class="col05">{{i.price}}元</li>
<li class="col06">
<div class="num_add">
<a href="javascript:;" class="add fl" @click="add(index)">+</a>
<input type="text" class="num_show fl" v-model="i.count">
<a href="javascript:;" class="minus fl" @click="minus(index)">-</a>
</div>
</li>
<li class="col07">{{i.count*i.price}}元</li>
<li class="col08"><a href="javascript:;" @click="delx(i.id)">删除</a></li>
</ul>
<ul class="settlements">
<li class="col01"></li>
<li class="col02"></li>
<li class="col03">合计(不含运费):<span>¥</span><em>{{totalPrice}}</em><br>共计<b>2</b>件商品</li>
<li class="col04"><a @click="pay">去结算</a></li>
</ul>
</div>
</template>
<script>
export default {
name:'cart',
data() {
return {
goods:[],
src:'/hou/static/goods/',
totalPrice:0
}
},
// 页面加载之前获取购物车参数信息
mounted(){
// 方法共用
this.get_data()
},
methods:{
// 添加点击事件 加一
add:function(index){
this.goods[index].count++;
this.totalPricefn(index,'+');
},
// 添加点击事件 减一
minus:function(index){
if(this.goods[index].count>1){
this.goods[index].count--;
this.totalPricefn(index,'-');
} },
// 计算总价
totalPricefn:function(index,params){
if(params=='+'){
this.totalPrice += this.goods[index].price*1;
}else if(params =='-'){
this.totalPrice -= this.goods[index].price*1;
}else{
this.totalPrice += this.goods[index].price*this.goods[index].count;
}
},
// 支付
pay:function(){
let data = {
"total":this.totalPrice,
} this.axios({
url:'/api/pay/pay/',
method:'get',
params:data
}).then(res=>{
//
let url = res.data.url;
location.href = url;
})
},
// 删除商品
delx:function(id){
let data = {
'uid':localStorage.getItem('uid'),
'gid':id
}
this.axios({
url:'/api/goods/cart/',
method:'delete',
data:data
}).then(res=>{
this.get_data();
})
},
// 获取初始信息
get_data:function(){
this.axios({
url:'/api/goods/cart/',
method:'get',
params:{"id":localStorage.getItem('uid')}
}).then(res=>{
this.goods = res.data.data;
this.totalPrice = 0;
this.goods.forEach((item,index)=>{
this.totalPricefn(index,'');
}) })
}
}
}
</script>

python代码实现购物车(django的redis与vue)的更多相关文章

  1. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  2. 【updating】python读书笔记-The Django Book2.0(for django1.4)

    原文:http://www.djangobook.com/en/2.0/frontmatter.html 译文:http://djangobook.py3k.cn/2.0/ 或者http://docs ...

  3. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  4. python用Django+Celery+Redis 监视程序(一)

    C盘创建一个目录就叫DjangoDemo,然后开始在该目录下操作. 1.新建Django工程与应用 运行pip install django 安装django 这里我们建一个名为demo的项目和hom ...

  5. python代码自动补全配置及Django入门Demo

    django入门代码示例小博客:https://pan.baidu.com/s/1pLjLPSv 1.自动补全功能 许多人都知道 iPython 有很好的自动补全能力,但是就未必知道 python 也 ...

  6. [转载]基于Redis的Bloomfilter去重(附Python代码)

    前言: “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大.去重需要考虑两个点:去重的数据量.去重速度.为了保持较快的去重速度,一般选择在内存中进行去重. 数据量不大时 ...

  7. 【Azure Redis 缓存】使用Python代码获取Azure Redis的监控指标值 (含Powershell脚本方式)

    问题描述 通过Metrics监控页面,我们能得知当前资源(如Redis)的运行情况与各种指标.如果我们需要把指标下载到本地或者生成JSON数据导入到第三方的监控平台呢?Azure是否可以通过Pytho ...

  8. python web框架——扩展Django&tornado

    一 Django自定义分页 目的:自定义分页功能,并把它写成模块(注意其中涉及到的python基础知识) models.py文件 # Create your models here. class Us ...

  9. django celery redis 定时任务

    0.目的 在开发项目中,经常有一些操作时间比较长(生产环境中超过了nginx的timeout时间),或者是间隔一段时间就要执行的任务. 在这种情况下,使用celery就是一个很好的选择.   cele ...

随机推荐

  1. CodeForces - 404B Marathon(精度)

    题意:一个人绕着一个长度为a的正方形逆时针跑,以(0,0)为起点,喝一次水可以跑d米,问每喝一次水可以跑到的位置坐标. 分析:这道题卡精度卡的太厉害了. 设l是正方形的周长,只有d对l取余且每次跑d米 ...

  2. mysql+MHA高可用 (一主双从)

    1.准备三台服务器 10.0.0.12 10.0.0.13 10.0.0.14 2.在三台服务器上执行操作 时间同步 [root@ c7m01 ~]# echo "*/5* * * * /u ...

  3. MVC学生管理系统-阶段IV(修改学生信息)

    项目源码 :https://download.csdn.net/download/weixin_44718300/11091042 前期准备,主体框架, 学生列表显示  请看阶段一文章 添加学生信息 ...

  4. HashMap源码阅读笔记

    HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...

  5. 读书笔记 - javascript 高级程序设计 - 第一章 简介

      第一章 简介   诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262  一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...

  6. Vue框架的介绍及使用

    Vue框架 定义:渐进式 JavaScript 框架 渐进式:可以控制一个页面的一个标签,可以控制一系列标签,也可以控制整个页面,甚至可以控制整个前台项目. 通过对框架的了解与运用程度,来决定其在整个 ...

  7. E. Double Elimination (DP)

    题目:传送门 题意:有 2^n 个人进行比赛,对他们编号 1~2^n,起初1和2打,3和4打,5和6打,7和8打...,然后1和2打完胜利的 和 3和4打完胜利的再打一场,1和2打完失败的和3和4打完 ...

  8. 代码杂谈-python函数

    发现函数可以设置属性变量, 如下 newfunc.func , newfunc.args def partial(func, *args, **keywords): """ ...

  9. Python语言基础与应用 (P23)上机练习:容器类型操作(未完待续)

    上机练习:容器类型操作〉 列表.元组基本操作+, *, len(), [], in Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 ...

  10. Tomcat启动报内存溢出错误:java.lang.OutOfMemoryError: PermGen space

    windows操作系统 找到D:\Tomcat-7\apache-tomcat-7.0.28\bin(解压安装的Tomcat)目录下的catalina.bat文件,打开该文件,找到下图所示的内容:添加 ...