【问题标题】:Method Not Allowed (GET): /cart/add/1/不允许的方法 (GET):/cart/add/1/
【发布时间】:2023-02-25 18:47:16
【问题描述】:

我的项目中允许方法 GET 有问题,我发现有问题但没有任何效果。 我尝试了一切,但没有任何效果,邮递员中的消息是 {不允许的方法 (GET):/cart/add/1/} 请帮我解决这个问题?

购物车/视图

@require_POST
def cart_add(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Product, id=product_id)
    form = CartAddProductForm(request.POST)
    print('privet')
    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):
    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})

cart/url
  path('', cart_detail, name='cart_detail'),
    path('add/<int:product_id>/', cart_add, name='cart_add'),
    path('remove/<int:product_id>/', cart_remove, name='cart_remove')

shop/view

def product_detail(request, id, slug):
    product = Product.objects.filter(id=id, slug=slug)
    cart_product_form = CartAddProductForm()
    return render(request, 'web/catalog.html', {'product': product,
                                                'cart_product_form': cart_product_form})


shop/detail.html

                          <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="{% url 'cart:cart_add' product.id %}" type="submit" value='add to cart'><img
                                            src="{% static 'img/icons/card/cart.svg' %}" alt="cart.svg"/></a>
                                </div>
                            </form>
                            

【问题讨论】:

    标签: django


    【解决方案1】:

    您应该将 @require_POST 替换为 @require_http_methods(["GET", "POST"]) 它将允许获取和发布这两种方法。

    【讨论】:

      【解决方案2】:

      require_POST() 装饰器意味着您需要视图只接受 POST 方法。尝试将其更改为require_GET(),以便您只接受 GET 方法,或者您可以使用 @require_http_methods(["GET", "POST"]) 列出允许的方法并允许 GET 和 POST 方法。

      Here 我附上文档中的一篇文章。

      【讨论】:

        猜你喜欢
        • 2013-06-16
        • 2019-06-27
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 2016-01-31
        • 2013-03-23
        • 1970-01-01
        相关资源
        最近更新 更多