首页 > 解决方案 > 解决视图没有返回 HttpResponse 对象。它返回 None 而不是

问题描述

我收到以下错误

请求方法:POST 请求 URL: http: //127.0.0.1 :8000/orders/place_order/ Django 版本:3.1

Exception Value:    
The view orders.views.place_order didn't return an HttpResponse object. It returned None instead.

这是我的views.py文件的片段

if request.method == 'POST':
    form = OrderForm(request.POST)
    if form.is_valid():
        print('we are here checking if the form is valid')
        data = Order()
        data.user = current_user
        data.first_name = form.cleaned_data['first_name']
        data.last_name = form.cleaned_data['last_name']
        data.phone = form.cleaned_data['phone']
        data.email = form.cleaned_data['email']
        data.address_line_1 = form.cleaned_data['address_line_1']
        data.address_line_2 = form.cleaned_data['address_line_2']
        data.country = form.cleaned_data['country']
        data.state = form.cleaned_data['state']
        data.city = form.cleaned_data['city']
        data.order_note = form.cleaned_data['order_note']
        data.order_total = grand_total
        data.tax =tax
        data.ip = request.META.get('REMOTE_ADDR')
        data.save()
        return redirect('checkout')
else:    
    return redirect('checkout')

标签: pythondjango

解决方案


如果表单无效,您的视图也应该返回响应,您可以引发异常:

if request.method == 'POST':
    form = OrderForm(request.POST)
    if form.is_valid():
        print('we are here checking if the form is valid')
        data = Order()
        data.user = current_user
        data.first_name = form.cleaned_data['first_name']
        data.last_name = form.cleaned_data['last_name']
        data.phone = form.cleaned_data['phone']
        data.email = form.cleaned_data['email']
        data.address_line_1 = form.cleaned_data['address_line_1']
        data.address_line_2 = form.cleaned_data['address_line_2']
        data.country = form.cleaned_data['country']
        data.state = form.cleaned_data['state']
        data.city = form.cleaned_data['city']
        data.order_note = form.cleaned_data['order_note']
        data.order_total = grand_total
        data.tax =tax
        data.ip = request.META.get('REMOTE_ADDR')
        data.save()
        return redirect('checkout')
    else:
        raise BadRequest() # Or do whatever makes sense to you
else:    
    return redirect('checkout')

推荐阅读