【发布时间】:2016-07-01 11:53:17
【问题描述】:
我是 django 的新手,我正在尝试通过单击网页上的按钮从 views.py 中触发简单的功能。这就是我所做的:
HTML:
<form method="post">{% csrf_token %}
<button type="submit" class="btn btn-circle btn-primary btn-xl" id="add_address_button"><i class="fa fa-check"></i></button>
</form>
$('#add_address_button').click( function() {
$.post("adres/add_address_button_action/", function () {
alert('OK');
});
});
urls.py
url(r'^adres/add_address_button_action/$',views.add_address_button_action, name = 'add_address_button_action'),
views.py
def add_address_button_action(request):
adres = get_object_or_404(Adres, id =2)
return render(request, 'serwis/address_detail.html', RequestContext(request, {'address_detail_zmienna': adres}))
来自终端的信息:
Forbidden (CSRF token missing or incorrect.): /adres/add_address_button_action/
...
"POST /adres/add_address_button_action/ HTTP/1.1" 403 2274
我在 views.py 中尝试了不同的返回:
return render_to_response('serwis/address_detail.html', RequestContext(request, {'address_detail_zmienna': adres}))
return redirect('serwis/address_detail.html', {'address_detail_zmienna': adres})
但它们都不起作用。
如果有人能帮我解决这个问题,我将不胜感激。 我已经阅读了很多有关此问题的主题,但其中大多数都已过时 - 并没有帮助。
亲切的问候
【问题讨论】:
-
您查看过 chrome 开发工具吗?您是否确认该令牌存在于您的 html 中?你检查过post请求吗?它是否也包含令牌?
-
另一件事,与 django 无关,但与 js / html / jQuery 有关。如果您使用的是提交类型的按钮,则您也不需要添加点击处理程序。类型提交触发发布请求。第二个发布请求(通过 jQuery)可能在没有所需令牌的情况下发送
-
如果我使用 chrome 开发工具,这些元素看起来像这样:
-
不,改用'action'属性
-
并在 chrome 开发工具(在网络选项卡中)中查找请求标头,查看令牌是否传递给服务器..