django-registration позволяет написать custom backend, чтобы справиться с необходимостью пользовательских аксессуаров.
Итак, что бы вы сделали, создайте свой собственный бэкэнд, внедрив сами register
и activate
.
Вот пример того, как можно реализовать register
функцию:
def register(self, request, **kwargs):
username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email,
password, site,
send_email=False)
# send an email to the admins with user information
send_new_user_notification(new_user) # you would write this function
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
Ключевым моментом является, чтобы убедиться, send_email
установлен в ложь; что не позволит пользователю получить ссылку активации. Затем вы можете решить, имеет ли адрес электронной почты, отправленный админам, ссылку активации, или если вы довольны тем, что они идут в админ и просто проверяют поле «Актив».
Если вы используете AuthenticationForm
от django.contrib.auth
то он будет автоматически отклонять пользователей, чьи is_active
является ложным, но если вы не используете что то убедитесь, что выполнить следующую проверку для любого запроса, где требуется активный пользователь:
def restricted_view(request):
if request.user and request.user.is_active:
#continue with the code
Вы также можете написать свой собственный декоратор (см. @login_required
для указателей). Обратите внимание, что @login_required
делает не проверить на is_active
.