社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

karaname • 6 年前 • 909 次点击  

我的视图中有两个方法,我尝试在第一个方法中检查重定向,但不知道怎么做。两种方法> 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
文章 [ 1 ]  |  最新文章 6 年前
schillingt
Reply   •   1 楼
schillingt    7 年前

我认为你的主要问题是 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订单。