2010-12-10 5 views
6

¿Cómo configurar el registro de django de que una cuenta debe ser activada manualmente por un administrador?¿Cómo configurar django-registration para que una cuenta se active manualmente?

Después de que el titular de la cuenta haga clic en el enlace del correo electrónico, me gustaría que se envíe un correo electrónico al administrador, y también debe hacer clic en un enlace y solo entonces la cuenta estará activa.

¿Es posible con django-registration, o necesito usar algo más, y qué usar?

Respuesta

5

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.

Cuestiones relacionadas