使用Django服务器登录IOS
我有一个用Django编写的服务器,我想从我的iOS应用程序登录。 我试着调试这段代码一个多星期了,但我能找出问题所在。 我尝试从一个网页登录到我的服务器,它可以正常工作。因此,我认为服务器工作正常。所以我认为问题应该在我的iOS请求上 我有一个ViewController,它是一个NSURLConnectionDataConnectionLegate,这是我的登录函数使用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
- (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个错误。那么您现在得到了什么?没有什么?现在可以用了吗?