Py学习  »  Django

如何在method>Django中检查重定向

karaname • 4 年前 • 465 次点击  

我的视图中有两个方法,我尝试在第一个方法中检查重定向,但不知道怎么做。两种方法> order_create order_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})
def order_success(request):
    if order_create_method_redirect:
        order = Order.objects.order_by('id').last()
        return render(request, 'orders/order_success.html', {'order':order})
    else:
        return HttpResponse('Empty page')

网址.py

app_name = 'order'
urlpatterns = [
    url(r'^order$', views.order_create, name='order_create'),
    url(r'^order/success$', views.order_success, name='order_success'),
]
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49984
 
465 次点击  
文章 [ 1 ]  |  最新文章 4 年前
schillingt
Reply   •   1 楼
schillingt    4 年前

我认为你的主要问题是 reverse 获取要传递到的url redirect . 但是,您还有一些其他问题需要纠正。

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

第二,你的设计不支持同时下多个订单。如果X订单发生在时间A,那么这些用户都有 order_success 同时查找最新的顺序,它们都将看到绝对的最后顺序。相反,您应该在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条目 订单成功 包括kwarg订单。