2016-06-20 3 views
0

Я пытаюсь передать данные, используя угловой почтовый стол $ django, но этого не происходит. Каждый раз, когда я передаю данные, он показывает пустой dict, это означает, что я неправильно использую запрос POST. Я новичок в интеграции django и угловом приложении, поэтому было бы здорово, если бы кто-то мог мне помочь в этом.Угловой пост http, не передающий данные на просмотр django

app.js

vm.login = function() { 
      vm.authMsg = ''; 
      var login_data = {'username': vm.account.username, 'password': vm.account.password}; 

      if(vm.loginForm.$valid) { 

       $http 
       .post('/login_app/', {login_data:JSON.stringify(login_data)}) 
       .then(function(response) { 
        console.log(login_data); 

        if (!response.login_data) { 
        vm.authMsg = 'Incorrect credentials.'; 
        // vm.authMsg = response; 
        }else{ 
        $state.go('app.dashboard'); 
        } 
       }, function() { 
        vm.authMsg = 'Server Request Error'; 
       }); 
      } 
      else { 
       vm.loginForm.account_username.$dirty = true; 
       vm.loginForm.account_password.$dirty = true; 
      } 
      }; 

views.py

def login_app(request): 
    if request.method == 'POST': 
     print request.POST 
     username = request.POST.get('username') 
     password = request.POST.get('password') 

     print 'username', username 
     print 'password', password 
     user = authenticate(username=username, password=password) 
     print 'user', user 
     if user: 
      if user.is_authenticated(): 
       print 'user authenticate' 
       login(request, user) 
       return HttpResponse(json.dumps({}), content_type='application/json') 
     else: 
      return HttpResponse('<h1>Access Denied.<br>Wrong Credentials.</h1>') 

login.html

<form role="form" ng-submit="login.login()" name="login.loginForm" novalidate="" class="form-validate mb-lg" method="post"> 

      <div class="form-group has-feedback"> 
       <input id="exampleInputUsername1" type="text" name="account_username" placeholder="Enter username" autocomplete="off" ng-model="login.account.username" required="" class="form-control" /> 
       <span class="fa fa-envelope form-control-feedback text-muted"></span> 
       <span ng-show="login.loginForm.account_username.$dirty &amp;&amp; login.loginForm.account_username.$error.required" class="text-danger">This field is required</span> 
      </div> 
      <div class="form-group has-feedback"> 
       <input id="exampleInputPassword1" type="password" name="account_password" placeholder="Password" ng-model="login.account.password" required="" class="form-control" /> 
       <span class="fa fa-lock form-control-feedback text-muted"></span> 
       <span ng-show="login.loginForm.account_password.$dirty &amp;&amp; login.loginForm.account_password.$error.required" class="text-danger">This field is required</span> 
      </div> 
      <div class="clearfix"> 
       <div class="checkbox c-checkbox pull-left mt0"> 
        <label> 
        <input type="checkbox" value="" name="account_remember" ng-model="login.account.remember" /> 
        <span class="fa fa-check"></span>Remember Me</label> 
       </div> 
       <div class="pull-right"><a ui-sref="page.recover" class="text-muted">Forgot your password?</a> 
       </div> 
      </div> 
      <button type="submit" class="btn btn-block btn-primary mt-lg">Login</button> 
     </form> 

urls.py

from django.conf.urls import patterns, url 
from login import views 

urlpatterns = patterns('', 
        url(r'^$',views.home, name='home'), 
        url(r'^login_app/$',views.login_app, name='login_app'), 
        ) 
+0

Он смотрит на меня как угловой посылает '' { «login_data»: { «имя пользователя»: ...}} '', но приложение Джанго пытается прочитать имя пользователя/пароль, то из верхнего Словаре уровня. (Не внутри '' login_data'' – nephlm

+0

@nephlm так что я должен передать его в другой переменной – User0706

ответ

2

Попробуйте это.

Если вы не завершаете/jsonify login_data, ваш существующий вид должен иметь возможность распаковывать его. Я уверен, что угловой автоматически обрабатывает json-преобразование, но я не думаю, что django делает.

vm.login = function() { 
     vm.authMsg = ''; 
     var login_data = {'username': vm.account.username, 'password': vm.account.password}; 

     if(vm.loginForm.$valid) { 

      $http 
      .post('/login_app/', login_data) 
      .then(function(response) { 
       console.log(login_data); 
      [...] 

Похоже, вы также хотите посмотреть на request.body, чтобы получить данные в формате JSON. Если ваш в django < 1.4, это что-то другое.

def login_app(request): 
    if request.method == 'POST': 
     print request.body 
     data = json.loads(request.body) 
     print data 
     username = data.get('username') 
     password = data.get('password') 
     [...] 
+0

ее не работает views.py печать это ?. имя пользователя None пароль None пользователь Нет – User0706

+0

попробовать с request.body от моего последнего изменения – nephlm

+2

@ User0706 в ваших views.py вы получаете данные для post с помощью postData = json.loads (request.body), в качестве углового отправки HTTP-запроса с типом контента application/json. получить в postData с json.loads – ranakrunal9

Смежные вопросы