Django 和 JEditable:CSRF 错误

Posted

技术标签:

【中文标题】Django 和 JEditable:CSRF 错误【英文标题】:Django and JEditable: CSRF error 【发布时间】:2012-10-12 17:43:17 【问题描述】:

我开始在 Django 中使用Jeditable 插件并很快遇到了一个 CSRF 错误:“CSRF 验证失败。请求中止。”、“CSRF 令牌丢失或不正确”

在撰写本文时,Jeditable 插件似乎最后一次更新是在 2008 年——在此 Django 开始要求 CSRF tokens 用于 POST 请求之后的某个时间。

如何将 Django CSRF 数据添加到 Jeditable 中?

【问题讨论】:

【参考方案1】:

通过 AJAX 请求提供 CSRF 令牌的首选方法是将 X-CSRFToken 标头设置为 CSRF 令牌的值。您需要修改构造的请求对象以设置标头值。

还提供了一个辅助函数来从 cookie 中获取 CSRF 令牌,而不是依赖于在模板中提供它,这大大简化了事情,即您不必内联发送 JS 代码或将令牌设置为模板本身的 JS 中的一个变量。

【讨论】:

【参考方案2】:

这个问题的答案来自similar jeditable post on CSRF。 CSRF 令牌可以添加到“submitdata”变量中。

为 Django 帖子扩展 1st jeditable example 看起来像这样:

$(document).ready(function() 
   $('.edit').editable('http://www.example.com/save.php',  
        submitdata :  csrfmiddlewaretoken : " csrf_token "
    );
);

注意,为了显示“csrf_token”值而不是整个表单字段,“csrf_token”被包裹在 .. 而不是 % .. % 中。

【讨论】:

以上是关于Django 和 JEditable:CSRF 错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 测试开发2

django 访问url报错Forbidden (CSRF cookie not set.): xxx 问

(转载)django 访问url报错Forbidden (CSRF cookie not set.): xxx 问

使用 jeditable 和 autogrow 的问题

Ruby on Rails 和 jeditable (jquery)

一起使用 DataTable FixedColumns 和 JEditable