我的上下文,我填写我的表格,如果我登录,可以将值保存在数据库中。
当我单击“登录”按钮时,我打开一个引导模态表单进行登录,并在登录过程中使用Ajax / Jquery。
我了解登录后CSRF令牌发生了更改,这就是为什么当我验证表单(POST)时,我收到一条消息:“禁止(403)CSRF验证失败。请求中止。”因为我没有刷新页面。
我不知道的是,如何在不丢失已经填写在表单中的所有数据的情况下刷新此令牌?
首先将{% csrf_token %}
添加到HTML正文中的模板然后在变量中获取csrf_token
值,并将其传递给ajax请求,如下所示
<script type="text/javascript">
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});
</script>
并在js中的变量中获取csrf_token
<script type="text/javascript">
// using jQuery
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
</script>
有关更多信息,请关注https://docs.djangoproject.com/en/2.2/ref/csrf/#setting-the-token-on-the-ajax-request