You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中GET访问/cart/add/1/提示Method Not Allowed问题求助

问题根源

你的cart_add视图通过@require_POST装饰器强制要求仅接受POST请求,但前端页面里的添加按钮用了<a>标签的href直接跳转——这会发送GET请求,完全不符合视图的访问规则,所以服务器返回"Method Not Allowed (GET)"错误。

修复方案

修改前端的提交逻辑,让按钮真正触发表单的POST提交,而不是直接跳转:

修改shop/detail.html代码

方案1:用button替换a标签(推荐)

把原来的<a>标签换成<button>,直接作为表单的提交按钮:

<form action="{% url 'cart:cart_add' product.id %}" method="post">
    {% csrf_token %}
    {{ cart_product_form.as_p }}
    {{ cart_product_form.non_field_errors }}
    <div class="Card-hover">
        <button class="Card-btn" type="submit">
            <img src="{% static 'img/icons/card/cart.svg' %}" alt="cart.svg"/>
        </button>
    </div>
</form>

方案2:保留a标签,用JS触发表单提交

如果一定要保留<a>标签的样式,给它添加点击事件来提交表单:

<form id="add-cart-form" action="{% url 'cart:cart_add' product.id %}" method="post">
    {% csrf_token %}
    {{ cart_product_form.as_p }}
    {{ cart_product_form.non_field_errors }}
    <div class="Card-hover">
        <a class="Card-btn" href="javascript:void(0)" onclick="document.getElementById('add-cart-form').submit()">
            <img src="{% static 'img/icons/card/cart.svg' %}" alt="cart.svg"/>
        </a>
    </div>
</form>

额外验证点

  • 确认CartAddProductForm的字段正常渲染,保证表单数据能通过POST传递到视图
  • 修改后点击按钮,会发送POST请求到/cart/add/1/,符合视图的权限要求,就能正常添加商品到购物车了

内容的提问来源于stack exchange,提问作者Reis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:23:20