我是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})
但它们都不起作用。
如果有人能帮我解决这个问题,我将非常感激。 我已经阅读了很多关于这个问题的主题,但是大多数都是过时的 - 并没有帮助。
亲切的问候
答案 0 :(得分:2)
看起来您没有将CSRF令牌传递给服务器。见https://docs.djangoproject.com/en/1.9/ref/csrf/#how-to-use-it。
您需要预先配置jQuery以在您所做的每个AJAX请求的标头中传递csrf标记,或者您需要将CSRF标记作为数据显式传递给$ .post()函数。
上述链接文档中提供了详细代码。
答案 1 :(得分:1)
在一天结束时,我遵循了本教程:
这非常有效。
谢谢大家的关注。
答案 2 :(得分:0)
我建议查看chrome开发人员工具:
这里的问题与js / html / jQuery有关。如果您使用提交类型的按钮,则不需要添加点击处理程序。具有type="submit"
触发器发布请求的按钮..第二个发布请求(通过jQuery)看起来是多余的并且在没有所需令牌的情况下发送(否则您将通过它)。
我建议使用&#39; action&#39;属性:
<form method="post" action="adres/add_address_button_action/">
{% 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>
现在它应该有用..