Django 如何在方法中检查重定向>;德扬戈

Django 如何在方法中检查重定向>;德扬戈,django,Django,在我的视图中有两个方法,我尝试在第一个方法中检查重定向,但不知道如何做。两种方法>order\u create和order\u success。在模板order\u success中,有关于用户信息和订单信息的值,也可以清除购物车。我要检查我的重定向 视图.py def order_create(request): cart = Cart(request) if request.method == 'POST': form = OrderCreateForm(r

在我的视图中有两个方法,我尝试在第一个方法中检查重定向,但不知道如何做。两种方法>
order\u create
order\u success
。在模板
order\u success
中,有关于用户信息和订单信息的值,也可以清除购物车。我要检查我的重定向

视图.py

def order_create(request):
    cart = Cart(request)

    if request.method == 'POST':
        form = OrderCreateForm(request.POST)

        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(
                    order=order, product=item['product'],
                    price=item['price'], quantity=item['quantity']
                )
            cart.clear_session()

        return redirect('order:order_success')
    else:
        form = OrderCreateForm()
        return render(request, 'orders/order_create.html', {'cart':cart, 'form':form})
app_name = 'order'
urlpatterns = [
    url(r'^order$', views.order_create, name='order_create'),
    url(r'^order/success$', views.order_success, name='order_success'),
]
url.py

def order_create(request):
    cart = Cart(request)

    if request.method == 'POST':
        form = OrderCreateForm(request.POST)

        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(
                    order=order, product=item['product'],
                    price=item['price'], quantity=item['quantity']
                )
            cart.clear_session()

        return redirect('order:order_success')
    else:
        form = OrderCreateForm()
        return render(request, 'orders/order_create.html', {'cart':cart, 'form':form})
app_name = 'order'
urlpatterns = [
    url(r'^order$', views.order_create, name='order_create'),
    url(r'^order/success$', views.order_success, name='order_success'),
]

我认为您的主要问题是没有使用
reverse
来获取要传递到
重定向
的url。但是,您还有一些其他问题需要纠正

一种是,您应该在传递给POST呈现的上下文中包含无效表单。这样可以向用户显示错误

第二,您的设计不支持同时下多个订单。如果在时间A出现X个订单,那么这些用户都在同时查找最新订单,他们都将看到绝对的最后一个订单。相反,您应该在url中包含订单id,并在成功时重定向到该特定url

from django.shortcuts import get_object_or_404
from django.urls import reverse

def order_create(request):
    cart = Cart(request)
    # Default to a basic form for the GET path. POST will override it.
    form = OrderCreateForm()
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)

        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(
                    order=order, product=item['product'],
                    price=item['price'], quantity=item['quantity']
                )
            cart.clear_session()
            # Only redirect on absolute success
            return redirect(
                reverse('order:order_success', kwargs={'order_id': order.id})
            )
    # Return the invalid form on POST
    return render(request, 'orders/order_create.html', {'cart':cart, 'form':form})

def order_success(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    return render(request, 'orders/order_success.html', {'order':order})

您还需要更改您的URL.py条目以获得
order\u success
以包含订单id kwarg。

感谢您的支持,但如果我使用with id,我可以通过暴力查看其他人的订单猜测。id不应该是自动递增的int,而应该是guid。如果这还不够,那么您可以通过会话传递订单id。