我不知道现在是使用该参数的好时机。
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需要注意或如何使用它。
答案 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})