django-registration le permite escribir un custom backend para manejar las necesidades de activación personalizadas.
Así que lo que harías es crear tu propio servidor, implementando el register
y activate
tú mismo.
Aquí hay un ejemplo de cómo se puede implementar la función 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
El punto clave es asegurarse de send_email
se establece en false; eso evitará que el usuario obtenga un enlace de activación. Luego puede decidir si el correo electrónico enviado a los administradores tiene un enlace de activación o si está satisfecho con ellos yendo a administrador y simplemente marcando la casilla "Activo".
Si utiliza AuthenticationForm
de django.contrib.auth
entonces se rechazará automáticamente a los usuarios cuyas is_active
es falsa, pero si usted no está usando ese entonces asegúrese de ejecutar la siguiente comprobación para cualquier solicitud donde se requiere un usuario activo:
def restricted_view(request):
if request.user and request.user.is_active:
#continue with the code
También puede escribir su propio decorador (consulte @login_required
para ver los punteros). Tenga en cuenta que @login_required
hace no compruebe is_active
.