我想在django中使用"从django.contrib.auth.forms导入UserCreationForm"创建用户时进行电子邮件验证。当用户注册到我的站点时,将创建一个用户,但他的活动状态将为false。并且验证码将被发送到他的电子邮件地址,当他输入验证码时,他的帐户将被激活。
为此,我想设置:
is_active = False
当他输入验证码时,它将被设置为:
is_active = True
但默认值为is_active = True
。那我怎么能做到False
?
答案 0 :(得分:4)
保存表单后,将显示返回用户对象。然后,您可以使用该对象来编辑is_active
状态:
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
# default to non-active
user.is_active = False
user.save()
您可以改为在post_save信号中管理对User实例的更新(这是一种更通用的方法,将在创建新用户时起作用)。在<your_app>/signals.py
(未测试)中:
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def default_to_non_active(sender, instance, created, **kwargs):
if created:
instance.is_active = False
instance.save()
参考tutorial,以获取有关信号的更多信息。
答案 1 :(得分:3)
您可以使用此示例激活或取消激活状态:
user = User.objects.create()
user.is_active = False
user.save()