AttributeError:'NoneType'对象没有属性'is_active'

时间:2016-04-02 15:51:04

标签: javascript django django-authentication parsley.js nonetype

我正在尝试使用Parsley.js和Django设置前端用户身份验证检查。
这是我的观点

@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.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 == 'The password and e-mail are ok.')
           return true;
       if(jsonResponseText == '404')
           return false;
  }, '/password_check/'
);

但是当调用“password_check”函数时,我收到此错误:
/ strong_check /
AttributeError 'NoneType'对象没有属性'is_active'

我试图在“request.is_ajax()”之后添加一个 print 来测试值,它有时会捕获电子邮件,有时会捕获密码,但绝不会将两者放在一起。

我该如何解决?

1 个答案:

答案 0 :(得分:2)

使用django的authenticate功能时,只有在验证成功后才会返回用户对象。

提供的凭据不正确时,authenticate会返回None。这就是您获得AttributeError

的原因

要解决此问题,请为用户添加其他检查,如下所示:

if user and user.is_active:

这样,只有在用户存在的情况下才会检查用户的is_active属性。