Exemplo n.º 1
0
 def post(self, request):
     user_id = request.session.get('ID')
     # 接受支付方式的id和订单编号
     try:
         payment = int(request.POST.get('payment'))
         order_sn = request.POST.get('order_sn')
     except:
         return JsonResponse(json_msg(1, '参数错误'))
     # 判断支付方式是否存在
     try:
         payment = Payment.objects.get(pk=payment)
     except:
         return JsonResponse(json_msg(2, '支付方式暂未开通'))
     # 判断订单是否存在
     try:
         order = Order.objects.get(order_sn=order_sn, user_id=user_id)
     except:
         return JsonResponse(json_msg(3, '订单编号不正确'))
     alipay = alipayfun()
     if payment.name == '支付宝':
         # 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
         order_string = alipay.api_alipay_trade_wap_pay(
             out_trade_no=order_sn,
             total_amount=str(order.order_price),
             subject='超市购物订单',  # 订单描述
             return_url="http://127.0.0.1:8000/orderform/completionfpayment/",
             notify_url=None  # 可选, 不填则使用默认notify url
         )
         # 拼接url
         url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
         return JsonResponse(json_msg(0, '成功', data=url))
Exemplo n.º 2
0
 def post(self, request):
     button_id = request.POST.get('button_id')
     try:
         AddressTable2.objects.get(pk=button_id)
         AddressTable2.objects.update(is_default=False)
         AddressTable2.objects.filter(pk=button_id).update(is_default=True)
         return JsonResponse(json_msg(0, '修改成功'))
     except AddressTable2.DoesNotExist:
         return JsonResponse(json_msg(1, '不存在该收获地址'))
Exemplo n.º 3
0
    def post(self, request):
        """
        需要接受的参数
        用户id
        商品id
        商品数量
        :param request:
        :return:
        """
        # 接受参数
        user_id = request.session.get('ID')
        sku_id = request.POST.get('sku_id')
        good_count = request.POST.get('good_count')
        try:
            #1. 判断是否为整数
            sku_id = int(sku_id)
            good_count = int(good_count)
        except:
            return JsonResponse(json_msg(2, '参数错误'))
        # 2.要在数据库中存在商品
        try:
            good_sku = GoodsSKU.objects.get(pk=sku_id)
        except GoodsSKU.DoesNotExist:
            return JsonResponse(json_msg(3, '商品不存在'))
        # # 判断库存
        # if good_sku.stock < good_count:
        #     return JsonResponse(json_msg(4, '库存不足'))

        # 操作数据库
        # 创建链接
        r = get_redis_connection()
        # 处理购物车的key
        cart_key = f'cart_{user_id}'
        # 添加
        # 获取购物车已经存在的数量, 加上要添加的和库存进行比较
        old_count = r.hget(cart_key, sku_id)
        if old_count is None:
            old_count = 0
        else:
            old_count = int(old_count)
        if old_count + good_count > good_sku.stock:
            return JsonResponse(json_msg(3, '库存不足'))
        # 如果数量为1,提示不能在减少了
        good_num = r.hget(cart_key, sku_id)
        if int(good_num) <= 1:
            return JsonResponse(json_msg(5, '客官,数量不能在少了'))
        # 将商品添加到购物车
        r.hincrby(cart_key, sku_id, -good_count)
        # 获取购物车中的总数量
        cart_count = get_cart_count(request)
        return JsonResponse(json_msg(0, '减少商品成功', data=cart_count))
Exemplo n.º 4
0
 def post(self, request):
     data = request.POST
     form = CheckAddressModelForm3(data)
     if form.is_valid():
         if form.checkMax(request):
             address = form.save(commit=False)
             user = UserTable.objects.get(pk=int(request.session.get('ID')))
             AddressTable2.objects.filter(is_default=True).update(is_default=False)
             address.user = user
             address.save()
             old_url = request.session.get('referer')
             if old_url:
                 del request.session['referer']
                 return JsonResponse(json_msg(0, '添加成功', old_url))
             else:
                 return render(request, 'orderform/gladdress.html')
         else:
             return JsonResponse(json_msg(1, '数据不合法', data=form.errors))
     else:
         return JsonResponse(json_msg(1, '数据不合法', data=form.errors))
Exemplo n.º 5
0
 def verify_login(request, *args, **kwargs):
     if request.session.get('ID') is None:
         # 将上一次请求的地址存入session
         referer = request.META.get('HTTP_REFERER', None)
         if referer:
             request.session['referer'] = referer
         if request.is_ajax():
             return JsonResponse(json_msg(1, '账号为未登陆'))
         else:
             return redirect('user:login')
     else:
         print(func)
         return func(request, *args, **kwargs)
Exemplo n.º 6
0
    def post(self, request):
        """
        保存订单数据
        """
        # 接受参数
        user_id = request.session.get('ID')
        user = UserTable.objects.get(pk=user_id)
        address_id = request.POST.get('address_id')
        sku_ids = request.POST.getlist('sku_ids')
        expressage = request.POST.get('expressage')
        # 操作数据
        try:
            address_id = int(address_id)
            expressage = int(expressage)
            sku_ids = [int(i) for i in sku_ids]
        except:
            return JsonResponse(json_msg(9, '参数错误'))
        # 验证收获地址和运输方式是否正确
        try:
            address = AddressTable2.objects.get(pk=address_id)
        except AddressTable2.DoesNotExist:
            return JsonResponse(json_msg(8, '收货地址不存在'))

        try:
            transport = Expressage.objects.get(pk=expressage)
        except Expressage.DoesNotExist:
            return JsonResponse(json_msg(7, '运输方式不存在'))
        order_sn = '{}{}{}'.format(datetime.now().strftime("%Y%m%d%H%M%S"), user_id, random.randrange(10000, 99999))
        address_info = "{}{}{}-{}".format(address.hcity, address.hproper, address.harea, address.detail_address)
        # 操作数据库

        # 创建保存点
        sid = savepoint()
        # 1.操作订单基本信息表
        order = Order.objects.create(
            user=user,
            order_sn=order_sn,
            transport_price=transport.price,
            transport=transport.name,
            username=address.user_name,
            phone=address.phone,
            address=address_info
        )
        # 2.操作订单商品表
        r = get_redis_connection()
        cart_key = f"cart_{user_id}"
        goods_total_price = 0
        for sku_id in sku_ids:
            try:
                goods_sku = GoodsSKU.objects.select_for_update().get(pk=sku_id, is_delete=False, is_selling=True)
            except GoodsSKU.DoesNotExist:
                savepoint_rollback(sid)
                return JsonResponse(json_msg(6, '商品不存在'))
            # 获取redis中的商品数量
            try:
                count = int(r.hget(cart_key, sku_id))
            except:
                savepoint_rollback(sid)
                return JsonResponse(json_msg(5, '购物车中数量不存在'))
            # 判断库存是否足够
            if goods_sku.stock < count:
                savepoint_rollback(sid)
                return JsonResponse(json_msg(4, '库存不足'))
            OrderGoods.objects.create(
                order=order,
                good_sku=goods_sku,
                price=goods_sku.price,
                count=count
            )
            goods_total_price += goods_sku.price * count
            # 扣除库存,销量增加
            goods_sku.stock -= count
            goods_sku.sales += count
            goods_sku.save()

        # 3.将订单基本信息表补充完成
        order_total_price = goods_total_price + transport.price
        order.goods_total_price = goods_total_price
        order.order_price = order_total_price
        order.save()

        # 4清空redis中的购物车信息
        r.hdel(cart_key, *sku_ids)
        savepoint_commit(sid)

        # 5合成响应返回
        return JsonResponse(json_msg(0, '创建订单成功', data=order_sn))