二十九、登陆时购物车合并(商品部分)

本文详细介绍了如何在用户登录时,通过重写登录视图函数,实现从Cookie中读取并更新Redis中购物车数据的过程。在登录成功后,会自动合并未登录状态下的购物车数据至已登录状态,确保数据的一致性和完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、重写登录功能的业务逻辑
  • 在users/下添加merge_cart_cookie_to_redis合并购物车的方法
import pickle
import base64
from django_redis import get_redis_connection


def merge_cart_cookie_to_redis(request, user, response):
    """
    合并请求用户的购物车数据,将未登录保存在cookie里的保存到redis中
    遇到cookie与redis中出现相同的商品时以cookie数据为主,覆盖redis中的数据
    :param request: 用户的请求对象
    :param user: 当前登录的用户
    :param response: 响应对象,用于清楚购物车cookie
    :return:
    """

    # 1、获取cookie
    cart_cookie = request.COOKIES.get('cart_cookie', None)
    # 2、判断cookie是否存在
    if cart_cookie is None:
        return response
    # 3、存在则解密 cart = {10: {‘count’:2, selected: True}。cart = {}
    cart = pickle.loads(base64.b64decode(cart_cookie))
    # 4、判断字典是否为空
    if not cart:
        return response
    # 5、不为空拆分数据
    # 6、哈希 对应字典 {sku_id: count,sku_id2:count2}
    cart_dict = {}
    # 7、集合 对应列表 选中[sku_id1, sku_id2]。未选中[sku_id3]
    sku_id = []  # 选中
    sku_id_none = []  # 未选中
    for skuid, data in cart.items():
        # 哈希
        cart_dict[skuid] = data['count']
        if data['selected']:
            sku_id.append(skuid)
        else:
            sku_id_none.append(skuid)
    # 8、写入redis
    conn = get_redis_connection('carts')
    conn.hmset('cart_%s' % user.id, cart_dict)
    if sku_id:
        conn.sadd('cart_selected_%s' % user.id, *sku_id)
    if sku_id_none:
        conn.srem('cart_selected_%s' % user.id, *sku_id_none)
    # 9、删除cookie
    response.delete_cookie('cart_cookie')

    return response

  • 在views下重写用户登录的视图函数

class UserLoginView(ObtainJSONWebToken):

    def post(self, request, *args, **kwargs):
        response=super().post(request, *args, **kwargs)

        serializer = self.get_serializer(data=request.data)

        if serializer.is_valid():
            user = serializer.object.get('user') or request.user
            # 合并购物车
            response=merge_cart_cookie_to_redis(request,user,response)

        return response

2、修改登陆子路由

urlpatterns = [
    ...
    # url(r'^authorizations/$', obtain_jwt_token), 
    url(r'^authorizations/$', views.UserAuthorizeView.as_view()),
    ...
]
购物车商品合并下单是指将用户在购物车中选择的多个商品合并成一笔订单进行结算的操作。下面是购物车商品合并下单的一般细节: 1. 添加商品购物车:用户在浏览商品页面,可以选择将商品添加到购物车中。用户可以选择不同的商品,并设置商品的数量和其他属性。 2. 购物车管理:用户可以在购物车页面对购物车中的商品进行管理,包括增加或减少商品数量、删除商品、修改商品属性等。 3. 商品合并:当用户选择进行结算,系统会将购物车中的商品进行合并合并的原则通常是相同商家的商品合并为一笔订单,不同商家的商品分别合并为不同的订单。 4. 订单生成:合并后的商品将生成相应的订单。每个订单通常包含了用户选择的商品、数量、价格等信息。订单还会包含用户的收货地址、支付方式等信息。 5. 结算支付:用户在确认订单后,可以选择支付方式进行支付。常见的支付方式包括在线支付、货到付款等。 6. 订单处理:商家在接收到订单后,会根据订单信息进行商品准备和发货等操作。用户可以通过订单跟踪功能了解订单的处理进度。 7. 物流配送:商家会安排物流公司进行商品配送。用户可以通过物流追踪功能了解商品的配送状态。 8. 确认收货:用户在收到商品后,可以确认收货并对订单进行评价。确认收货后,订单交易完成。 以上是购物车商品合并下单的一般细节。具体的实现方式和细节可能因不同的电商平台而有所差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值