django-allauth:如何在电子邮件验证后将用户设置为活动状态

Gra*_*ave 4 django django-admin django-authentication django-allauth

我主要使用django-allauth作为管理后端创建用户帐户的方法.我想要发生的是:

1)当用户完成注册程序时,发出验证电子邮件(我到目前为止工作)并将用户设置为非活动状态,工作人员,并通过defult分配给他们的"SurveyManager"组.目前,创建用户时将活动设置为true,将staff设置为false,并且不分配任何组.

2)单击电子邮件中的链接以验证其地址后,我希望将用户设置为活动状态,以便他们可以通过管理员后端登录.

我的具体问题是我不知道:1)如何或在何处设置用户的活动,人员和组的默认值 - 我想这可以在models.py文件中完成,但我的理解是用户模型包含在auth app中; 2)一旦电子邮件验证完成,如何触发代码将用户活动标志更改为true.

在此先感谢 - 如果这是一个创建不好的帖子,对不起,这是我的第一个!

Gra*_*ave 9

我似乎(大部分)通过使用信号解决了我的问题.这篇文章给了我这个想法(但遗憾的是没有提供任何代码示例),而这个网站给了我一些实际修改的具体例子(我发现这是Django世界中的一种稀有商品).

我最终在我的页面的view.py文件中添加了以下代码 - 我知道models.py建议用于信号,但所讨论的模型实际上来自allauth包:

from allauth.account.signals import user_signed_up, email_confirmed
from django.dispatch import receiver
from django.contrib.auth.models import Group
from django.contrib.auth.models import User
from allauth.account.models import EmailAddress

@receiver(user_signed_up)
def user_signed_up_(request, user, **kwargs):

    user.is_active = False
    user.is_staff = True
    Group.objects.get(name='SurveyManager').user_set.add(user)

    user.save()

@receiver(email_confirmed)
def email_confirmed_(request, email_address, **kwargs):

    new_email_address = EmailAddress.objects.get(email=email_address)
    user = User.objects.get(new_email_address.user)
    user.is_active = True

    user.save()
Run Code Online (Sandbox Code Playgroud)

唯一没有完成工作的是email_confirmed信号处理 - 它声称"EmailAddress匹配查询不存在",当它明显匹配数据库条目时,但我会继续并单独发布问题.