如何在Django重定向到订单完成页的视图中添加if语句修改Order模型
逻辑修正说明
你当前的实现缺少订单状态修改逻辑,且paymentComplete视图中直接查询complete=True的订单会抛出找不到对应订单的异常,修正步骤如下:
1. 修正views.py代码
@login_required(login_url='login') def paymentComplete(request): # 获取当前用户未完成的订单 order = Order.objects.get(user=request.user, complete=False) # 将订单状态修改为已完成 order.complete = True order.save() context = { 'order': order } return render(request, 'videogames/complete.html', context)
2. 异常处理优化(可选)
为了避免用户多次访问该页面或者不存在未完成订单时服务端抛出异常,可引入get_object_or_404做异常兼容:
from django.shortcuts import get_object_or_404 @login_required(login_url='login') def paymentComplete(request): order = get_object_or_404(Order, user=request.user, complete=False) order.complete = True order.save() context = { 'order': order } return render(request, 'videogames/complete.html', context)
安全提示
*当前仅通过前端跳转触发订单状态修改的逻辑存在安全风险,恶意用户可直接手动输入订单完成页URL,无需实际支付即可将订单标记为已完成。后续可对接PayPal的服务端回调接口,在服务端验证支付有效性后再修改订单状态,规避该风险。
内容的提问来源于stack exchange,提问作者KSWebDev1
相关产品推荐
相关产品推荐

