使用Django服务器登录IOS

使用Django服务器登录IOS,ios,django,login,nsurlsession,nsurlconnectiondelegate,Ios,Django,Login,Nsurlsession,Nsurlconnectiondelegate,我有一个用Django编写的服务器,我想从我的iOS应用程序登录。 我试着调试这段代码一个多星期了,但我能找出问题所在。 我尝试从一个网页登录到我的服务器,它可以正常工作。因此,我认为服务器工作正常。所以我认为问题应该在我的iOS请求上 我有一个ViewController,它是一个NSURLConnectionDataConnectionLegate,这是我的登录函数 - (IBAction)Login:(id)sender{ if ([self validateData]) { N

我有一个用Django编写的服务器,我想从我的iOS应用程序登录。 我试着调试这段代码一个多星期了,但我能找出问题所在。 我尝试从一个网页登录到我的服务器,它可以正常工作。因此,我认为服务器工作正常。所以我认为问题应该在我的iOS请求上

我有一个ViewController,它是一个NSURLConnectionDataConnectionLegate,这是我的登录函数

- (IBAction)Login:(id)sender{
if ([self validateData]) {

    NSURL *URL = [NSURL URLWithString:@"http://127.0.0.1:8000/passapp/login"];

    // Django requires csrf middleware token to work
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
    NSArray* cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"http://127.0.0.1:8000/passapp/login"]];
    NSLog(@"cookie csrf %@ /n",    [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]);
    NSHTTPCookie *csrfCookie;
    NSLog(@"lunghezza array@%lu", (unsigned long)[[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] count]);

    for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
        if ([cookie.name isEqualToString:@"csrftoken"]) {
            csrfCookie = cookie;
            NSLog(@"CSRF  %@ ",    csrfCookie.value);
        }
    }

    // Setting post request
    NSString *post = [[NSString alloc] initWithFormat:@"username=%@;password=%@;csrfmiddlewaretoken=%@;", [_username text], [_password text], csrfCookie.value];
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length] ];

    NSLog(@"post data : %@ /n" , post);

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    [request setAllHTTPHeaderFields:[NSHTTPCookie requestHeaderFieldsWithCookies:[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:URL]]];

    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request addValue:csrfCookie.value forHTTPHeaderField:@"X-CSRFToken"];
    [request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

    [request setHTTPBody:postData];
    request.HTTPMethod = @"POST";



    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                                completionHandler:
                                      ^(NSData *data, NSURLResponse *response, NSError *error) {
                                          NSLog(@"pupu");

                                          if (!error) {
                                              NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
                                              NSLog(@"response: %@",httpResp);
                                              if (httpResp.statusCode == 200) {
                                                  // handle the response here
                                              }
                                          }
                                          else{
                                              NSLog(@"Errore :%@", error);
                                          }

                                          NSLog(@"pupu");
                                      }
                                  ];

    [task resume];

}
}

这是我在终端上的错误:

[23/Sep/2015 10:28:56]"POST /passapp/login HTTP/1.1" 500 60018
我无法找出我的代码和请求有什么问题。 谁能帮帮我吗? 谢谢你抽出时间, 我希望有人能帮助我


干杯你看到了吗?我认为它有一个很好的答案,可能会对您有所帮助。

您可以发布django应用程序的完整回溯吗?您只需禁用调试并为
管理员定义至少一封有效的电子邮件即可。在设置中,每个错误都将发送到该电子邮件,除非您自定义了记录器。谢谢您的回答。通过禁用调试,错误从500变为“GET/passapp/login/HTTP/1.1”4013389“所以我不能发布完整的回溯。我不明白,只有禁用该选项,错误才能改变。顺便说一句,我的凭据是正确的,但我仍然得到错误,并且得到的请求应该是一个帖子…当调试被禁用时,必须在设置中的
ALLOWED_HOSTS
中指定您的域名。我已经这样做了,ALLOWED_HOSTS=['localhost','127.0.0.1',但没有500个错误。那么您现在得到了什么?没有什么?现在可以用了吗?