【问题标题】:CSRF errors when trying to add simple product to shopping cart尝试将简单产品添加到购物车时出现 CSRF 错误
【发布时间】: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})

编辑:这似乎不是标记问题的重复,因为该问题的答案是使用渲染返回请求,我正在这样做。

【问题讨论】:

标签: python django csrf


【解决方案1】:

清除缓存并重新加载页面。 如果不能解决,则给出准确的错误回溯。

编辑: from django.template import RequestContext

return render_to_response('results.html', {'results' : results}, context_instance=RequestContext(request) )

试试这个

【讨论】:

  • 清除缓存并重新加载没有帮助,甚至使用了不同的浏览器。如何提供特定的错误回溯,页面上没有任何内容
  • 可以添加你的settings.py中间件配置
  • 添加到问题
  • 我根据您的回答更改了视图并添加到问题中,仍然得到相同的错误
  • @waqasgard 我刚刚做了,这解决了我的问题!但是购物车肯定不应该是 csrf_exempt!
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多