【发布时间】:2014-12-16 20:16:27
【问题描述】:
我将 AngularJS 用于前端,将 Django 用于我正在开发的 Web 应用程序的后端。现在我正在登录用户,我遇到了一个奇怪的问题。以下是相关的 Angular 代码:
app.factory('AuthService', ["$http", "$q", "Session", "URL", function($http, $q, Session, URL) {
return {
login: function(credentials) {
var deferred = $q.defer();
$http.post(URL.login, credentials)
.then(function(data, status, headers, config) {
data=data.data; //WHY DOES THIS WORK?
if (data.success == true) {
alert("logged in");
Session.create(credentials.username, data.api_key);
deferred.resolve();
}
else {
deferred.reject("Login failed!");
}
}, function(data, status, headers, config) {
deferred.reject("Login failed!");
});
return deferred.promise
},
这里是对应的 Django 视图:
def login_user(request):
'''
Given a username and password, returns the users API key.
'''
if request.method == 'POST':
username = request.POST.get('username',None)
password = request.POST.get('password',None)
user = authenticate(username=username,password=password)
if user is not None:
api_key = ApiKey.objects.get(user=user)
response_data = {}
response_data["api_key"] = str(api_key).split(" ")[0]
response_data["success"] = True
return HttpResponse(json.dumps(response_data), content_type="application/json")
else:
return HttpResponse(json.dumps({"username":username,"success":False}),content_type="application/json")
return HttpResponseBadRequest()
当用户登录时,POST 请求由上述 Django 代码发送和处理。然后响应由上面的 AngularJS 代码获取。如您所见,Angular 代码中的then() 方法采用通常的四个参数:数据、状态、配置和标头。我希望看到数据包含来自 Django 代码的字典输出,并被适当地序列化为 JSON 对象。
然而发生的情况是 then() 方法中唯一未定义的参数是数据,它包含所有内容;标头、数据、状态码等
注释“为什么这样做”的行通过访问内部数据解决了问题。但是,我想知道为什么会发生这种情况以及是否有任何方法可以避免这种情况。我最好的猜测是它与 Django 序列化响应的方式有关,但我不确定。
我使用的是 Django 1.6.5。
【问题讨论】:
标签: django angularjs django-1.6