2016-11-14 4 views
1

Ich verwende django-alluth zur Authentifizierung/Registrierung auf meiner Django-App. Und ich muss ein benutzerdefiniertes Anmeldeformular mit nur einem Feld erstellen: E-Mail. Das Passwort wird auf dem Server generiert. Hier ist eine Form ich geschaffen habe:Passwort bei Benutzerregistrierung senden, django-allauth

from django import forms 
from users.models import User 


class SignupForm(forms.ModelForm): 
    email = forms.CharField() 

    class Meta: 
     model = User 
     fields = ['email',] 
     esclude = ['password1', 'password'] 

    def __init__(self, *args, **kwargs): 
     super(SignupForm, self).__init__(*args, **kwargs) 
     del self.fields['password1'] 
     del self.fields['password2'] 

    def signup(self, request, user): 
     password = str(User.objects.make_random_password()) 
     user.set_password(password) #!!!!!!! HERE 
     user.save() 

In settings.py:

ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.SignupForm' 

Und jetzt brauche ich eine E-Mail an den Benutzer mit seinem Passwort zu senden. Natürlich kann ich dies in signup Methode tun, aber es ist keine gute Praxis, da ein Formular nur zum Sammeln und Überprüfen von Informationen benötigt wird.

Es wird gut sein, user_signed_up django-allauth Signal zu hören, aber es wird unmöglich sein, Benutzerpasswort darin zu erhalten, wie ein Passwort in einem Hash gespeichert wird. Gibt es eine Möglichkeit, zusätzliche Parameter zum Signalisieren zu übergeben? Oder vielleicht gibt es andere Methoden, um eine E-Mail zu senden?

Vielen Dank.

Antwort

1

Wenn Sie dies nicht in der Anmeldemethode tun möchten, führen Sie die Anmeldung nicht im Formular, sondern in der Ansicht statt.

Der einzige Moment, in dem Sie Zugriff auf das Kennwort haben, ist richtig, wenn Sie es erstellen und es einem Benutzer geben, also müssen Sie es an diesen Benutzer senden.

+0

Ja, danke. Ich löste es, indem ich die Datei "utils.py" erstellte und dort eine Funktion mit dem Senden einer E-Mail definierte. –

Verwandte Themen