视图 bag.views.basket_remove 没有返回 HttpResponse 对象。它返回了 None

谁能解释一下为什么我会收到这个错误?

我正在创建在线商店,其中购物车功能取决于 cookie 中的 sessionid。

看,我在商店中的每个产品上都有一个函数 basked_add,它可以将指定的产品添加到购物篮中,并且可以正常工作,没有任何问题。

我在篮子中还有一个函数 basket_delete 可以从篮子中删除指定的产品,但不知何故它无法正常工作。这就是我提出这个问题的主要原因。

函数 basket_delete 被 JQuery 这样调用(等于 basked_add):

1. basket.html

$(document).on('click','#remove-button',function (e) {
        e.preventDefault();
        $.ajax({
            type: 'POST',url: '{% url "basket:basket_delete" %}',data: {
                productid: $('#add-button').val(),csrfmiddlewaretoken: "{{csrf_token}}",action: 'post',},success: function (json) {
    
            },error: function (xhr,errmsg,err) {}
        });
    })

2. 篮子> urls.py

app_name = 'basket'

urlpatterns = [
    path('',views.basket,name='basket'),path('add/',views.basket_add,name='basket_add'),path('delete/',views.basket_delete,name='basket_delete'),]

3. 然后函数被执行

basket > views.py

from django.http.response import JsonResponse
from basket.basket import Basket

def basket_delete(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':
        product_id = int(request.POST.get('productid'))
        basket.delete(product=product_id)
        response = JsonResponse({'Success': True})
        return response

basket > context_processors.py

from .basket import Basket


def basket(request):
    return {'basket': Basket(request)}

basket > bag.py

class Basket():
   def delete(self,product):
        product_id = str(product.id)

        if product_id in self.basket:
            del self.basket[product_id]

        self.session.modified = True

在控制台出现错误:

POST http://127.0.0.1:8000/basket/delete/ 500(内部服务器错误)

在 url http://127.0.0.1:8000/basket/delete/ 上从 django 调试:

视图 bag.views.basket_delete 没有返回 HttpResponse 对象。它返回 None 。

其中最奇怪的是 basked_add 也没有呈现任何视图,而且它工作正常,但是出现 basket_delete 错误。

basked_add 视图

def basket_add(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':
        product_id = int(request.POST.get('productid'))
        quantity = int(request.POST.get('quantity'))
        size = int(request.POST.get('size'))
        product = get_object_or_404(Product,id=product_id)
        basket.add(product=product,quantity=quantity,size=size)
        basket_quantity = basket.__len__()
        response = JsonResponse({'quantity': basket_quantity})
        return response
i569546235 回答:视图 bag.views.basket_remove 没有返回 HttpResponse 对象。它返回了 None

如果代码没有出现在条件块中,您必须至少返回一个默认响应。

试试这个:

from django.http.response import JsonResponse
from basket.basket import Basket

def basket_delete(request):
    basket = Basket(request)
    if request.POST.get('action') == 'post':
        product_id = int(request.POST.get('productid'))
        basket.delete(product=product_id)
        response = JsonResponse({'Success': True})
        return response
     return JsonResponse('details': 'There is no action key in post request')

只需根据您的业务案例修改代码并避免错误,如果没有条件匹配,您至少必须返回默认响应。

本文链接:https://www.f2er.com/4879.html

大家都在问