查询购物车数据

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/00/02/CtM3BVrRcUeAHp9pAARfIK95am88523545",
        "price": "3388.00",
        "selected": true
    },
    {
        "id": 12,
        "count": 1,
        "name": "华为 HUAWEI P10 Plus 6GB+64GB 钻雕蓝 移动联通电信4G手机 双卡双待",
        "default_image_url": "http://image.meiduo.site:8888/group1/M00/00/02/CtM3BVrRdICAO_CRAAcPaeOqMpA2024091",
        "price": "3388.00",
        "selected": true
    }
]
参数 类型 是否必须 说明
id int 商品sku id
count int 数量
selected bool 是否勾选,默认勾选
name str 商品名称
default_image_url str 商品默认图片
price decimal 商品单价

2. 后端实现

在carts/serializers.py中创建序列化器

class CartSKUSerializer(serializers.ModelSerializer):
    """
    购物车商品数据序列化器
    """
    count = serializers.IntegerField(label=‘数量‘)
    selected = serializers.BooleanField(label=‘是否勾选‘)

    class Meta:
        model = SKU
        fields = (‘id‘, ‘count‘, ‘name‘, ‘default_image_url‘, ‘price‘, ‘selected‘)

在carts/views.py 中修改视图,增加get方法

class CartView(APIView):
    ...

    def get(self, request):
        """
        获取购物车
        """
        try:
            user = request.user
        except Exception:
            user = None

        if user is not None and user.is_authenticated:
            # 用户已登录,从redis中读取
            redis_conn = get_redis_connection(‘cart‘)
            redis_cart = redis_conn.hgetall(‘cart_%s‘ % user.id)
            redis_cart_selected = redis_conn.smembers(‘cart_selected_%s‘ % user.id)
            cart = {}
            for sku_id, count in redis_cart.items():
                cart[int(sku_id)] = {
                    ‘count‘: int(count),
                    ‘selected‘: sku_id in redis_cart_selected
                }
        else:
            # 用户未登录,从cookie中读取
            cart = request.COOKIES.get(‘cart‘)
            if cart is not None:
                cart = pickle.loads(base64.b64decode(cart.encode()))
            else:
                cart = {}

        # 遍历处理购物车数据
        skus = SKU.objects.filter(id__in=cart.keys())
        for sku in skus:
            sku.count = cart[sku.id][‘count‘]
            sku.selected = cart[sku.id][‘selected‘]

        serializer = CartSKUSerializer(skus, many=True)
        return Response(serializer.data)

原文地址:https://www.cnblogs.com/hzlnice/p/9393122.html

时间: 2024-10-01 04:39:45

查询购物车数据的相关文章

C# 将Access中时间段条件查询的数据添加到ListView中

C# 将Access中时间段条件查询的数据添加到ListView中 一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); l

【ASH】如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据

[ASH]如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 如何导出ASH数据--利用exp导出基表的数据(重点) ② 12c的expdp参数VIEWS_AS_TABLES选项 ③ expdp工具不能导出哪些对象? Tips: ① 本文在itpub(http://blog.

SQL学习_查询重复数据和连接多个表数据的方法

进行数据库测试时需要根据不同场景查询数据,以便验证发现的问题是否为脏数据引起的.记录一下最近常用的查询方法: 1. 查询表中重复数据(id不同,多个字段值相同) select P1.* from project as P1, project as P2 where P1.id<>P2.id and P1.ProjectId=P2.ProjectId and P1.ServiceTypeId=P2.ServiceTypeId and P1.Rank=P2.Rank 2.连接多个表数据 selec

数据库:去重和查询重复数据

在数据库表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值.关键词 distinct用于返回唯一不同的值. 表A: 1.作用于单列 select distinct name from A 执行后结果如下: 作用于多列 示例2.1 select distinct name, id from A 执行后结果如下: 实际上是根据name和id两个字段来去重的,这种方式Access和SQL Server同时支持. 有时候需要查询重复数据的记录,可以用group

查询总共要查询的数据量

CREATE TABLE #tablespaceinfo ( nameinfo VARCHAR(50) , rowsinfo BIGINT , reserved VARCHAR(20) , datainfo VARCHAR(20) , index_size VARCHAR(20) , unused VARCHAR(20) ) DECLARE @tablename VARCHAR(255); DECLARE Info_cursor CURSOR FOR SELECT '[' + [name] +

MySQL的YEARWEEK函数以及查询本周数据(转)

MySQL的YEARWEEK函数以及查询本周数据 MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010-3-14') 返回 11 SELECT YEARWEEK('2010-3-14',1) 返回 10 其中第二个参数是 mode ,具体指的意思如下: Mode First day of week Range Week 1 is the first we

违章查询助手数据调用分享

车辆违章对于有爱车的人来说是一个重要,在APP中集成车辆违章查询,违章查询助手数据调用支持查询违章时间.违章地点.违章行为等. 接口名称:违章查询助手数据调用 接口平台:聚合数据 接口地址:http://v.juhe.cn/wz/query 支持格式:json/xml/jsonp 请求方式:POST GET 请求示例:http://v.juhe.cn/wz/query?city=SH&hphm=苏L50A11&engineno=123456&key=key 违章查询助手数据调用JS

mongo里面根据对象字段的ID查询 db.Photo.find({&#39;owner.$id&#39;:ObjectId(&#39;xxxx&#39;)}) , 并且使用forEach循环修改查询的数据

var ones = db.Photo.find({'owner.$id':ObjectId("5344f0dab7c58e8e098b4567")}) db.Photo.find({'owner.$id':ObjectId("5344f0dab7c58e8e098b4567")}).forEach(function(o){o.owner=null;db.Photo.save(o)}); mongo里面根据对象字段的ID查询 db.Photo.find({'owne

Oracle取查询结果数据的第一条记录SQL

Oracle取查询结果数据的第一条记录SQL: select * from (select * from <table> order by <key>) where rownum=1; select * from (select * from <table> order by <key> desc) where rownum=1;