【发布时间】:2019-05-24 13:24:31
【问题描述】:
我收到了错误
CSRF 验证失败。请求中止。
在我编写的一个简单的购物车应用程序中尝试使用“添加到购物车”时。
我的模板中的代码:
<form action="{% url "cart:cart_add" instance.id %}" method="post">
{% csrf_token %}
{{ cart_product_form }}
<input type="submit" value="add to cart">
</form>
以及来自views.py的我的观点:
@require_POST
def cart_add(request, product_id):
cart = Cart(request)
product = get_object_or_404(Product, id=product_id)
form = CartAddProductForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
cart.add(product=product, quantity=cd['quantity'], update_quantity=cd['update'])
return redirect('cart:cart_detail')
def cart_detail(request):
template = loader.get_template('/webapps/my_webapp/furniture_site/cart/templates/cart/detail.html')
cart = Cart(request)
for item in cart:
item['update_quantity_form'] = CartAddProductForm(initial={'quantity': item['quantity'], 'update': True})
context={'cart': cart}
return HttpResponse(template.render(context))
就我所见,一切似乎都很好,我错过了什么?
我的中间件配置:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
]
仍然不起作用的替代视图:
def cart_detail(request):
cart = Cart(request)
for item in cart:
item['update_quantity_form'] = CartAddProductForm(initial={'quantity': item['quantity'], 'update': True})
return render(request, 'cart/detail.html', {'cart': cart})
编辑:这似乎不是标记问题的重复,因为该问题的答案是使用渲染返回请求,我正在这样做。
【问题讨论】:
-
@atn,虽然上下文确实提供了价值