2016-04-02 7 views
0

Я настраиваю проверку подлинности пользователя на лицевой панели с помощью Parsley.js и Django. Это мой взглядОдно из значений json.dumps равно null

@requires_csrf_token 
def password_check(request): 
    email = request.POST.get('email') 
    password = request.POST.get('password1') 
    user = authenticate(email=email, password=password) 

    if request.is_ajax(): 
     if user and user.is_active: 
      res = "These password and e-mail are ok." 
      ajax_vars_login = {'response': res, 'email': email, 'password': password} 
      json_data_login = json.dumps(ajax_vars_login) 
     else: 
      res = "The e-mail or the password field aren't correct." 
      ajax_vars_login = {'response': res, 'email': email, 'password': password} 
      json_data_login = json.dumps(ajax_vars_login) 

     return HttpResponse(json_data_login, content_type='application/json') 

И это Петрушка валидатор:

Parsley.addAsyncValidator(
    'emailPwCombination', function (xhr) { 
     var password = $('#password').parsley(); 
     var email = $('#email').parsley(); 
     var response = xhr.responseText; 
     var jsonResponse = JSON.parse(response); 
     var jsonResponseText = jsonResponse["response"]; 

     if(jsonResponseText == 'These password and e-mail are ok.') 
      return true; 
     if(jsonResponseText == '404') 
      return false; 
    }, '/password_check/' 
); 

Проблема заключается в том, что, кажется, что электронная почта не отправляется на сервер, потому что всякий раз, когда я нажимаю на представить, я получите два ответа xhr.
Первый ответ:

{password: null, response: "The e-mail or the password field aren't correct.",…} 
email: "[email protected]" 
password: null 
response: "The e-mail or the password field aren't correct." 

Второй ответ:

{password: "examplepassword", response: "The e-mail or the password field aren't correct.", email: null} 
email: null 
password: "examplepassword" 
response: "The e-mail or the password field aren't correct." 

Что мне не хватает?

+0

где находится html –

ответ

2

Этот код находится внутри асинхронного валидатора, поэтому каждый раз, когда вы вызываете .parsley() на значение, он отправляет его на сервер. Таким образом, вы получите два отдельных запроса, один из которых содержит только адрес электронной почты и один, содержащий только пароль.

Я не думаю, что вы поняли, что такое петрушка. Он предназначен для проверки отдельных полей в соответствии с набором критериев; а не для отправки полной формы данных на сервер для обработки. Это можно сделать очень просто в нескольких строках базового jQuery, здесь нет необходимости в петрушке.

+0

Да, я думал, что это было либо для отдельных полей, и для обработки формы. Спасибо за ваш ответ :) –