我在我的最新产品上使用(和学习)Django,我刚刚安装并开始使用django-registration应用程序以允许我的用户自行注册。
一切都运行良好,但我正在考虑将每个新用户分配给特定的组(已创建),因此我可以将管理员与普通用户“分开”。
我该怎么做?关于这个应用程序的文档非常糟糕,IMO。
我没有创建任何模型或配置来开始使用django-registration app。
答案 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)