在Appcelerator Titanium中,如何获得Django的CSRF代币?

2024-05-29 11:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Appcelerator Titanium和Python的Django来创建一个移动应用程序。正如您可能已经猜到的,Django正被用于后端。目前我正在尝试创建一个登录表单,它需要一个CSRF令牌来正确地接受数据。我试图从Django检索CSRF令牌,但我尝试过,但失败了,Google没有任何答案。在

问题是通常你会得到一个包含CSRF令牌的HTML页面并发送它。我现在想做的是在不知道CSRF的情况下发一个帖子。在appcelerator中,我试过跑步

HTTPSession.open(GET, *url*)
token = HTTPSession.getRecievedHeaders("X-CSRF-TOKEN")
HTTPSession.open(POST, *url)
HTTPSession.getRecievedHeaders("X-CSRF-TOKEN", token)
HTTPSession.send(data)

但由于钛的工作原理,这并不起作用。那我怎么能拿到代币呢?我是否需要创建一个特定的url来创建一个会话并显示CSRF令牌?我只是担心,一旦我收到令牌,我将需要重新连接到服务器,令牌将被更改。在

在我的google搜索中,我发现Drupal在url上有一个函数:services/session/token

在Django有没有类似的词?或者我需要创建一个只显示CSRF令牌的页面吗?在


Tags: 数据djangotoken应用程序url表单google页面
2条回答

如果您使用Titanium来创建应用程序,那么可以使用SetRequestHeader来设置请求中的令牌。在

希望有帮助。在

我需要在Django中创建我自己的函数来实现这一点,但是我终于让它工作起来了!在

function getCSRF() {
    var csrfHTTP = Ti.Network.createHTTPClient({
        onload : function() {
            Ti.App.Properties.setString("csrf", this.responseText);
        }
    });
    csrfHTTP.open("GET", "http://website.com/api/csrftoken/");
    csrfHTTP.send();
}

然后通过

^{pr2}$

使用它:

loginHTTP.setRequestHeader("X-CSRFToken", Ti.App.Properties.getString("csrf"));

一旦连接到该网站,就会在Django中创建一个会话,并为该特定IP创建一个csrf令牌,以便您可以根据需要多次检索它

相关问题 更多 >

    热门问题