2010-12-10 4 views
6

Come impostare la registrazione django che un account deve essere attivato manualmente da un amministratore?Come impostare la registrazione di django che un account deve essere attivato manualmente?

Dopo che il titolare dell'account ha fatto clic sul collegamento nell'e-mail, desidero che venga inviata un'e-mail all'amministratore, inoltre deve fare clic su un collegamento e solo allora l'account sarà attivo.

È possibile con django-registration o devo usare qualcos'altro e cosa usare?

risposta

5

registrazione django consente di scrivere un custom backend per gestire le esigenze di attivazione personalizzate.

Quindi quello che dovresti fare è creare il tuo back-end, implementando lo register e lo activate da solo.

Ecco un esempio di come è possibile implementare la funzione 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 

Il punto chiave è quello di assicurarsi send_email è impostato su false; ciò impedirà all'utente di ottenere un link di attivazione. Quindi puoi decidere se l'e-mail inviata agli amministratori ha un link di attivazione o se ti accontenti di andare all'amministratore e basta controllare la casella "Attiva".

Se si utilizza AuthenticationForm da django.contrib.auth allora rifiuterà automaticamente gli utenti il ​​cui is_active è falso, ma se non si sta usando che quindi assicurarsi di eseguire il seguente controllo per qualsiasi richiesta in cui è richiesto un utente attivo:

def restricted_view(request): 
    if request.user and request.user.is_active: 
     #continue with the code 

È inoltre possibile scrivere il proprio decoratore (consultare @login_required per i puntatori). Si noti che @login_required fa non verificare per is_active.