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))
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, '不存在该收获地址'))
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))
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))
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)
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))