2010-12-10 3 views
6

Jak skonfigurować rejestrację django, aby konto zostało ręcznie aktywowane przez administratora?Jak skonfigurować rejestrację Django, aby konto zostało aktywowane ręcznie?

Po kliknięciu odsyłacza w wiadomości e-mail, chciałbym, aby wiadomość e-mail została wysłana do administratora, a także kliknąć łącze i tylko wtedy konto będzie aktywne.

Czy jest to możliwe z rejestracją Django, czy muszę użyć czegoś innego i co używać?

Odpowiedz

5

Rejestracja django umożliwia napisanie custom backend w celu obsługi indywidualnych potrzeb aktywacyjnych.

Użytkownik powinien utworzyć własny backend, wdrażając samodzielnie: register i activate.

Oto przykład tego, jak można realizować register funkcję:

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 

Kluczową kwestią jest, aby upewnić send_email jest ustawiona na false; to uniemożliwi użytkownikowi uzyskanie linku aktywacyjnego. Następnie możesz zdecydować, czy wiadomość e-mail wysłana do administratorów ma link aktywacyjny, czy jesteś zadowolony z ich dostępności do administratora i po prostu zaznaczając pole "Aktywne".

Jeśli używasz AuthenticationForm z django.contrib.auth następnie zostanie ona automatycznie odrzucać użytkowników, których is_active jest False, ale jeśli nie używasz następnie upewnij się, że aby uruchomić następujący czek na każde żądanie, gdzie wymagana jest aktywnym użytkownikiem:

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

Możesz również napisać własny dekorator (patrz: @login_required dla wskazówek). Zauważ, że nie sprawdzanie dla sprawdzanie dla .