【问题标题】:405 error method is not allowed python django405错误方法不允许python django
【发布时间】:2021-09-17 02:28:17
【问题描述】:

我正在 Django(书籍示例)中开发购物车应用程序。当我尝试通过浏览器对其进行测试时,它响应 405 method not allowed 错误。据我了解,当我通过表单(方法='post')发送请求时,它正在发送 http GET 请求。据我所知,这是错误(405)的原因。 这是 HTML 表单:

<form action="{% url 'cart:cart_add' product.id %}" method="POST">
    {{ cart_product_form }}
    {% csrf_token %}
    <input type="submit" value="Add to cart">
</form>

forms.py 文件:

from django import forms
PRODUCT_QUANTITY_CHOICES = [(i, str(i)) for i in range(1,21)]
class CartAddProductForm(forms.Form):
    quantity = forms.TypedChoiceField(choices=PRODUCT_QUANTITY_CHOICES, coerce=int)
    override = forms.BooleanField(required=False, initial=False, widget=forms.HiddenInput)

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'], override_quantity=cd['override'])
    return redirect('cart:cart_detail')

@require_POST
def cart_remove(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Product, id=product_id)
    cart.remove(product)
    return redirect('cart:cart_detail')

@require_POST
def cart_detail(request):
    cart = Cart(request)
    return render(request, 'cart/detail.html', {'cart': cart})

【问题讨论】:

  • 第一次加载页面或从表单提交数据时是否出现错误?
  • 在这两种情况下,它都会重定向到 cart_detail 视图。所以无论如何我得到了这个错误

标签: python django http-status-code-405


【解决方案1】:

删除@require_POST for cart_detail

def cart_detail(request):
    cart = Cart(request)
    return render(request, 'cart/detail.html', {'cart': cart})

我建议您通过来自 link 的示例 GitHub 使用 Django 3 检查您的整个代码

【讨论】:

  • 我已经试过了。它发生另一个错误:NoReverseMatch at /cart/ Reverse for 'cart_remove' not found。 “cart_remove”不是有效的视图函数或模式名称。
  • 您是否在 urls.py 中添加了 name='cart_detail' 以查看详细信息?
  • app_name = "cart" ?
  • 是的,当然。名称,app_name。一切。
  • 查看 awnser 中的链接
猜你喜欢
  • 2019-07-05
  • 1970-01-01
  • 2021-12-20
  • 2018-01-07
  • 1970-01-01
  • 2017-11-13
  • 2016-08-24
  • 2018-06-05
  • 2016-12-02
相关资源
最近更新 更多