【发布时间】:2019-02-26 07:51:57
【问题描述】:
我使用POST 方法,因为我需要更改数据库。但是每次使用POST的方法,都会出现这个错误。每次我单击按钮时,页面都不会加载并显示"POST /book/go-action/ HTTP/1.1" 405 0。当我使用q = request.POST["quantity"] 或q = request.POST.get('quantity', '') 时没有区别。如果我使用GET 方法,则不会出现问题,但GET 方法不能满足需要。我也不需要action 的形式,因为我不需要页面重定向到某个地方,我使用ajax 来调用函数视图。我该如何解决这个问题?
更新:
问题是由于缺少action="{% url 'cart:add_to_cart' %}" 引起的。但我不希望它重定向到另一个页面,这就是我使用 Ajax 而不是使用action 的原因。如果使用action,那么我猜Ajax 将变得毫无意义。
book/detail.html:
<script>
$(document).ready(function () {
$("#add").click(function () {
alert('clicked');
$.ajax({
url: '{% url "cart:add_to_cart" %}',
type: "POST",
dataType: 'json',
success: function (response) {
$("#cartButton").text("Cart" + "(" + response.quantity + ")");
},
error: function (response) {
alert('Got an error');
}
});
});
});
</script>
<form method="post"> {% csrf_token %}
<select name="quantity">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<input name="bookID" value=" {{ book.id }} " hidden>
<button id="add" type="submit"> Add to Cart</button>
</form>
cart/views.py:
def add_books(request):
c = Cart.objects.get(user=request.user)
if request.method == 'POST':
# q = request.POST["quantity"]
# book_id = request.POST["bookID"]
q = request.POST.get('quantity', '')
book_id = request.POST.get('bookID', '')
# the rest of the code here
return JsonResponse(response)
cart/urls.py:
app_name = 'cart'
urlpatterns = [
path('add_books/', views.add_books, name='add_to_cart')
]
book/urls.py:
app_name = 'book'
urlpatterns = [
path('<slug:slug>/', views.BookDetailView.as_view(), name='detail'),
name='category_search'),
]
【问题讨论】:
-
对于数据库中的更改,您应该始终使用 POST。
-
@guillermochamorro 是的,我正在使用
POST并提到了这一点。 -
是的,我注意到了,但您也说您尝试使用 GET,而 GET 不是您发送数据以保存在数据库中的方式。
-
@guillermochamorro 没关系,你知道如何解决这个问题以及导致这个问题的原因吗?
-
你使用 django 表单吗?
标签: javascript jquery ajax django