2016-03-30 67 views
0

我有一個問題,我沒有得到任何連接到Django服務器。在瀏覽器控制檯我得到一個錯誤信息:Django Tastypie - Angular登錄

[![控制檯錯誤] [1] [1]

我使用tastypie並有userResource類:

class UserResource(ModelResource): 

class Meta: 
    queryset = User.objects.all() 
    fields = ['first_name', 'last_name', 'email'] 
    allowed_methods = ['get', 'post'] 
    resource_name = 'user' 

def override_urls(self): 
    return [ 
     url(r"^(?P<resource_name>%s)/login%s$" % 
      (self._meta.resource_name, trailing_slash()), 
      self.wrap_view('login'), name="api_login"), 
     url(r'^(?P<resource_name>%s)/logout%s$' % 
      (self._meta.resource_name, trailing_slash()), 
      self.wrap_view('logout'), name='api_logout'), 
    ] 

def login(self, request, **kwargs): 
    self.method_check(request, allowed=['post']) 

    data = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json')) 

    username = data.get('username', '') 
    password = data.get('password', '') 

    user = authenticate(username=username, password=password) 
    if user: 
     if user.is_active: 
      login(request, user) 
      return self.create_response(request, { 
       'success': True 
      }) 
     else: 
      return self.create_response(request, { 
       'success': False, 
       'reason': 'disabled', 
       }, HttpForbidden) 
    else: 
     return self.create_response(request, { 
      'success': False, 
      'reason': 'incorrect', 
      }, HttpUnauthorized) 

def logout(self, request, **kwargs): 
    self.method_check(request, allowed=['get']) 
    if request.user and request.user.is_authenticated(): 
     logout(request) 
     return self.create_response(request, { 'success': True }) 
    else: 
     return self.create_response(request, { 'success': False }, HttpUnauthorized) 

然後在我的客戶端中,我有一個loginController,它應該使用用戶名和密碼發送POST數據。 的LoginController:

module.controller('LoginController', ['$scope','$http', 
     function($scope, $http) { 
     $http({ 
       method: 'POST', 
       data: {'username' : 'test', 'password' : 'test123' }, 
       url: 'http://localhost:8000/api/v1/user/login/' 
      }).then(function successCallback(response) { 
       console.log("OK Respone"); 
       console.log(response.data); 
       $scope.orders = response.data.objects; 
       }, function errorCallback(response) { 
       console.log("NO Response"); 
     }); 
}]); 

回答

1

您需要提供給後端允許的主機,其請求將被處理的列表。檢查this要點代碼片段,或考慮使用解決跨域請求問題的django-cors-headers包。

使用django-cors-headers可以配置允許哪些領域提出要求,或者可以由一個指定,或者使用正則表達式(這是非常有用的情況下,你將有訪問相同的API,並有許多子域!許多其他選項

好運

+0

我在十字架解決了這個問題,這是在請求URL的末尾斜槓但「angular.js:11442 POST HTTP://本地主機: 8000/api/v1/user/login/500(內部服務器錯誤)「仍然出現,是否與後端或客戶端有關? –

+0

在控制檯中,按下失敗的請求並切換到響應選項卡看什麼錯誤是,它在你的代碼中發生了什麼。 – iulian