django

时间:2016-05-04 20:15:53

标签: javascript python django

在我无法使用这些答案为我的问题找到可行的解决方案之前,我知道之前已经提出了与此类似的问题。

我有一个页面,其中包含表单A和许多复选框。表单和相关复选框是通过Django模板创建的。我通过javascript从Django Template创建的表单A的输入值创建了一个新表单B.由于csrf_token错误,Django不接受我的新表格B.有人可以告诉我如何从django呈现的表单A中提取csrf标记,并将其用作动态创建的javascript表单的csrf标记吗?

2 个答案:

答案 0 :(得分:3)

您可以在发布的数据中包含csrf令牌。

您可以从html表单中的隐藏字段中提取它:

var token = $('input[name="csrfmiddlewaretoken"]').val();

使用jquery选择器:

function getCookie(name) {
    var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
    return v ? v[2] : null;
}

var token = getCookie('csrftoken');

或者,如果你喜欢普通的js,你可以使用这个函数从文档cookie中提取它:

"02:00.0 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)"
"02:00.1 Ethernet controller: Intel Corporation 82575EB Gigabit Network Connection (rev 02)

答案 1 :(得分:1)

我认为更简单的方法是使用cookie。 csrf令牌只是一个cookie,您可以检索其值。请查看Ajax上的部分,看看它是否可以提供任何帮助https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax

var csrftoken = Cookies.get('csrftoken');

使用javascript cookie库执行此操作应该可以帮助您检索csrf令牌。