django-registration - 特定组的新用户

时间:2011-05-01 17:57:45

标签: django registration django-registration

我在我的最新产品上使用(和学习)Django,我刚刚安装并开始使用django-registration应用程序以允许我的用户自行注册。

一切都运行良好,但我正在考虑将每个新用户分配给特定的组(已创建),因此我可以将管理员与普通用户“分开”。

我该怎么做?关于这个应用程序的文档非常糟糕,IMO。

我没有创建任何模型或配置来开始使用django-registration app。

3 个答案:

答案 0 :(得分:4)

我最终为此做了一个分叉,因为这让我发疯了。

https://github.com/kcunning/django-registration

基本上,将以下内容添加到settings.py文件中:

REGISTRATION_DEFAULT_GROUP_NAME = “组名”

通过注册模块添加的任何用户将在创建时获得该组。

答案 1 :(得分:3)

首先,我不是d-r(django-registration)的专家,实际上只是检查了它,因为你在问题中提到了它。所以,如果其他人有更好的答案,请提交。无论如何,它就在这里。

我注意到,在registration.models.RegistrationManager中的create_inactive_user函数中可以找到创建用户(或“profile”作为d-r调用它们)的方式。所以,在这个函数之后:

new_user.is_active = False
new_user.save()

您可以添加以下内容:

default_group = Group.objects.get(name=WHATEVER_THE_GROUP_NAME_IS)
user_group, is_created = UserGroup.get_or_create(user=new_user)
user_group.group = default_group
#user_group.groups.add(default_group)   # Django ver. 1.7+
user_group.save()

你可能没有get_or_create,因为我认为你不能用同一个用户名创建多个用户,但我宁愿安全而不是抱歉。

这种方法会让你编辑dr文件(这可能不是最好的事情)以及硬编码某些东西(例如默认的组名),但它应该是一个很好的踩点。

PS。默认组名可以是位于settings.py文件中的变量,这将使其更易于访问和漂亮。例如:

settings.py:
DEFAULT_GROUP_NAME = 'YOUR GROUP NAME'

registration/models.py:
default_group = Group.objects.get(name=settings.DEFAULT_GROUP_NAME)

无论如何,希望有所帮助。

答案 2 :(得分:0)

django-registration-redux具有自定义信号,可用于将注册用户分配给特定组。 “ user_registered”信号可以用于此目的。请参阅django-registration-redux documentation

from django.contrib.auth.models import Group


def user_created(sender, user, request, **kwargs):
    group = Group.objects.get(name='Kurum') 
    group.user_set.add(user)
    user.save()


from registration.signals import user_registered
user_registered.connect(user_created)