2

I'm using (and learning) Django on my newest product, and I just installed and started using django-registration app to allow my users to auto-register themselves.

Everything's working good, but I'm thinking about assigning every new user to a specific group (already created), so I can "separate" the admins from the normal users.

How can I do this? The documentation about this app is awful, IMO.

I didn't create any model or configuration to start using the django-registration app.

4

3 回答 3

4

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

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

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

REGISTRATION_DEFAULT_GROUP_NAME="组名"

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

于 2011-05-18T16:10:54.060 回答
3

首先,我不是博士(django-registration)的专家,实际上只是因为您在问题中提到它而检查了它。因此,如果其他人有更好的答案,请提交。无论如何,它来了。

我注意到在registration.models.RegistrationManager 中的create_inactive_user 函数中可以找到创建用户(或dr 所称的“配置文件”)的方式。所以,在这个函数之后:

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)

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

于 2011-05-01T19:00:02.977 回答
0

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

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)
于 2020-01-16T20:03:50.243 回答