cookie存储购物车数据

Cookie存储购物车数据

背景:

当用户处于未登录状态时,可以浏览商品,查看详细商品信息,也可以添加购物车。

此时数据不能存在redis中,因为redis存储数据需要以用户的身份做标识,用户不登录就没有身份标识。

所以此时的数据应该存储在本地的数据存储位置,即cookie当中。

实现思路:

  • 客户端在详情页发送商品信息,商品信息经由vue封装成json,向服务器发送ajax请求。
  • 视图函数接收到ajax请求,以request.body.decode()方式接收数据并且解码。
  • 将获取的数据封装成字典,加密后存入cookie中。方式为:response.set_cookie(‘cart‘, cart_str, max_age=60 * 60 * 24 * 14),返回response,页面显示添加成功。
  • 客户端请求购物车,请求发送至服务器。
  • 视图函数从cookie中读取数据,将数据解码,封装成前台需要的数据格式。
  • 前台模板变量接收到数据,vue对其进行处理,最终渲染页面,显示购物车数据。

界面效果与Redis存储购物车数据相同,视图函数代码如下:

from django.shortcuts import render
from django.views import View
import json
from django import http
from carts.utils.code import RETCODE
from carts.utils import my_json
from django_redis import get_redis_connection

class DetailsView(View):
    def get(self, request):
        return render(request, 'd.html')

class CartsView(View):
    def get(self, request):
        c_list = []
        cart_str = request.COOKIES.get('cart')
        if cart_str is None:
            context = {
                'v_js_carts':c_list
            }
            return render(request, 'c.html', context)
        cart_dict = my_json.loads(cart_str)
        print(cart_dict)
        for k,v in cart_dict.items():
            c_d = {k:v}
            c_list.append(c_d)
        print(c_list)
        context = {
            'v_js_carts':c_list
        }
        return render(request, 'c.html', context)

    def post(self, request):
        # 1.接收
        # 接收这五个参数:
        # vmodel_skuamount :this.vmodel_skuamount,
        # vmodel_skucaption : this.vmodel_skucaption,
        # vmodel_skucount : this.vmodel_skucount,
        # vmodel_skuname : this.vmodel_skuname,
        # vmodel_skuprice : this.vmodel_skuprice
        param_dict = json.loads(request.body.decode())
        amount = param_dict.get('vmodel_skuamount')
        caption = param_dict.get('vmodel_skucaption')
        count = param_dict.get('vmodel_skucount')
        name = param_dict.get('vmodel_skuname')
        price = param_dict.get('vmodel_skuprice')

        # 2.验证
        if not all([amount, caption, count, name, price]):
            return http.JsonResponse({
                'code':RETCODE.PARAMERR,
                'errmsg':'参数不完整'
            })
        # 3.处理
        response = http.JsonResponse({
            'code':RETCODE.OK,
            'errmsg':'ok'
        })
        # 将数据存入cookie
        # 1.读取cookie中的购物车数据
        cart_str = request.COOKIES.get('cart')
        if cart_str is None:
            cart_dict = {}
        else:
            cart_dict = my_json.loads(cart_str)
        # 2.增加新的商品信息
        cart_dict = {
            'amount':amount,
            'caption':caption,
            'count':count,
            'name':name,
            'price':price
        }
        # 3.将数据存入cookie中
        cart_str = my_json.dumps(cart_dict)
        response.set_cookie('cart', cart_str, max_age=60 * 60 * 24 * 14)
        # 4.响应
        return response

源码

原文地址:https://www.cnblogs.com/lulujunsir/p/carts_cookie.html

时间: 2024-10-06 16:45:40

cookie存储购物车数据的相关文章

cookie : 存储数据

cookie : 存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据 1.不同的浏览器存放的cookie位置不一样,也是不能通用的 2.cookie的存储是以域名形式进行区分的 3.cookie的数据可以设置名字的 4.一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样 5.每个cookie存放的内容大小也是有限制的,不同的浏览器存放大小不一样 我们通过document.cookie来获取当前网站下的cookie的时候,得到的

Session和Cookie实现购物车

来自森大科技官方博客http://www.cnsendblog.com/index.php/?p=342GPS平台.网站建设.软件开发.系统运维,找森大网络科技!http://cnsendnet.taobao.com 使用Session和Cookie实现购物车的比较   购物车相当于现实中超市的购物车,不同的是一个是实体车,一个是虚拟车而已.用户可以在购物网站的不同页面之间跳转,以选购自己喜爱的商品,点击购买时,该商品就自动保存到你的购物车中,重复选购后,最后将选中的所有商品放在购物车中统一到付

Java 读取不到Cookie中的数据

电商项目购物车模块,要求用户在非登录情况下也可将商品加入购物车,因此设计如下: 1.如果添加购物车时,用户已经登录,则将购物车数据储存到redis和数据库中,而且数据要保持一致,用户查询时从redis中获取: 2.如果添加购物车时,用户未登录,则将购物车数据添加到cookie中,查询.修改和删除也在cookie中进行:如果用户登录成功,则通知将cookie中的购物车数据持久化到数据库和redis中. 用户未登录时,将购物车加入cookie,代码如下: 此处的cookieKey生成规则是:Good

js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总

在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要.   什么是Cookie 所谓Cookie,只是一条极为短小的信息,它被浏览器自动地放置在访问用户的电脑硬盘中. 例如:C:\Users\[user]\AppData\Roaming\Microsoft\Windows\Cookies 如上图所示,打开的一个文件里面,标示了一个域下多个Cookie的信息. 检测/判断浏览器是否支持Cookie 在绝大多数浏览器中,可

修改购物车数据

1. 后端接口设计 请求方式 : PUT /cart/ 请求参数: JSON 或 表单 参数 类型 是否必须 说明 sku_id int 是 商品sku id count int 是 数量 selected bool 否 是否勾选,默认勾选 返回数据: JSON 参数 类型 是否必须 说明 sku_id int 是 商品sku id count int 是 数量 selected bool 是 是否勾选,默认勾选 2. 后端实现 在carts/views.py中修改视图,添加put方法 clas

查询购物车数据

1. 后端接口设计 请求方式 : GET /cart/ 请求参数: 无 返回数据: JSON 或 表单 [ { "id": 9, "count": 3, "name": "华为 HUAWEI P10 Plus 6GB+64GB 钻雕金 移动联通电信4G手机 双卡双待", "default_image_url": "http://image.meiduo.site:8888/group1/M00/0

HTML5使用local storage存储的数据是如何保存在本地的

HTML5使用local storage存储的数据是如何保存在本地的?(我使用的是chrome浏览器,chrom浏览器是用sqlite来保存本地数据的) HTML5 的local storage 是通过浏览器在本地存储的数据. 基本使用方法如下: <script type="text/javascript"> localStorage.firstName = "Tom"; alert(localStorage.firstName); </scrip

数据库中用varbinary存储二进制数据

问题描述:将图片.二进制文件内容等数据存储在数据库中,并能从数据库中取出还原为图片或文件,数据库存储二进制数据用varbinary字段. 分析:由于之前数据库中没有用过varbinary存储数据,首先要把varbinary搞懂了,其次就是图片类型与二进制类型之间的转换,文件类型与二进制类型之间的转换. 准备工作:     1.varbinary 与 binary的区别:             固定长度 (binary) 的或可变长度 (varbinary) 的 binary 数据类型.    

cookie存储

由于HTTP协议是地域无关的,所以用户经常使用cookies作为持久存储.URL加载系统提供接口来创建和管理cookies,发送cookies作为http请求的一部分,当收到服务端响应时获取cookies. OS X和iOS提供NSHTTPCookieStorage类,这个类提供管理NSHTTPCookie对象集合的接口.OS X中,所以应用共享cookies:ios中每个应用管理自己的cookies. 相关章节:cookie存储 版权声明:本文为博主原创文章,未经博主允许不得转载.