我开始在 Django 中使用Jeditable插件并很快遇到了 CSRF 错误:“CSRF 验证失败。请求中止。”、“CSRF 令牌丢失或不正确”
在撰写本文时,Jeditable 插件似乎最后一次更新是在 2008 年——在这个 Django 开始要求CSRF 令牌用于 POST 请求之后的某个时间。
如何将 Django CSRF 数据添加到 Jeditable?
这个问题的答案来自CSRF 上类似的可编辑帖子。CSRF 令牌可以添加到“submitdata”变量中。
扩展Django 帖子的第一个 jeditable 示例如下所示:
$(document).ready(function() {
$('.edit').editable('http://www.example.com/save.php', {
submitdata : { csrfmiddlewaretoken : "{{ csrf_token }}"}
});
});
请注意,为了显示“csrf_token”值而不是整个表单字段,“csrf_token”被包裹在 {{..}} 而不是 {% .. %} 中。
通过 AJAX 请求提供 CSRF 令牌的首选方法是将X-CSRFToken
标头设置为 CSRF 令牌的值。您需要修改构造的请求对象以设置标头值。
还提供了一个辅助函数来从 cookie 中获取 CSRF 令牌,而不是依赖于在模板中提供它,这大大简化了事情,即您不必内联发送 JS 代码或将令牌设置为变量JS 在模板本身。