谁能解释一下为什么我会收到这个错误?
我正在创建在线商店,其中购物车功能取决于 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