Django:我如何使用auth_user表的is_active?

时间:2015-04-20 08:34:37

标签: python django python-2.7 authentication django-models

我不知道现在是使用该参数的好时机。

djangoproject它描述如下:

  

布尔值。指定是否应将此用户帐户视为活动帐户。我们建议您将此标志设置为False而不是删除帐户;这样,如果你的应用程序有任何外键给用户,外键不会中断。

     

这不一定控制用户是否可以登录。验证后端不需要检查is_active标志,默认后端不需要。如果要拒绝基于is_active为False的登录,则由您自己在登录视图或自定义身份验证后端中进行检查。但是,login()视图使用的AuthenticationForm(默认值)会执行此检查,权限检查方法(如has_perm()和Django admin中的身份验证)也会执行此检查。对于非活动用户,所有这些函数/方法都将返回False。

readthedocs它描述如下:

Authorization for inactive users

  

非活动用户是经过身份验证但其属性is_active设置为False的用户。但这并不意味着他们无权做任何事情。例如,他们可以激活他们的帐户。

     

权限系统中对匿名用户的支持允许匿名用户有权执行某些操作,而非活动身份验证用户则不会这样做。

     

不要忘记在您自己的后端权限方法中测试用户的is_active属性。

任何人都可以举一些例子让我知道param需要注意或如何使用它。

3 个答案:

答案 0 :(得分:10)

from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
if user is not None:  #to check whether user is available or not?
    # the password verified for the user
    if user.is_active:   
        print("User is valid, active and authenticated")
    else:
        print("The password is valid, but the account has been disabled!")
else:
    # the authentication system was unable to verify the username and password
    print("The username and password were incorrect.")

这将有助于您了解django身份验证。

答案 1 :(得分:1)

非活动用户是将其is_active字段设置为False的用户。

从django版本1.10开始:ModelBackend(默认身份验证后端)和RemoteUserBackend身份验证后端禁止这些非活动用户进行身份验证。因此,如果您使用这些后端,则不需要使用以下样式:

#authentication has been successful now...
if user.is_active:
    login(request,user)
    #redirect to success page
else:
    #return disabled account error message

如果自定义用户模型没有is_active字段,则允许所有用户进行身份验证。 在版本1.10之前,ModelBackend允许非活动用户进行身份验证 - 这在您允许用户进行身份验证然后允许用户激活其帐户(仅在他们成功通过身份验证后)之后才有用。

当然,@ login_quired装饰器不检查用户的is_active标志。

检查AUTHENTICATION_BACKENDS以查看您使用的是哪些。 见http://www.myonlinetraininghub.com/create-an-excel-add-in-for-user-defined-functions-udfs

答案 2 :(得分:0)

def MyFormView(request):
    if request.method == 'POST':
        m_form = myform(request.POST)
        a_form = AccountForm(request.POST)
        if m_form.is_valid() and a_form.is_valid():
            user = m_form.save()
            user.is_active = True
            a_form.instance.user = user
            a_form.save()
            messages.success(request,f'Your Account Has Been created')
            return redirect('/')
    else:
        m_form = myform()
        a_form = AccountForm()
    return render(request, 'app/index.html', {'m_form':m_form, 'a_form':a_form})