2016-11-29 1 views
0

Ursprünglich habe ich mit der Django-Registrierung begonnen, um die E-Mail-Verifizierung der Registrierung zu implementieren. Ich habe ein benutzerdefiniertes Anmelde-/Registrierungsformular für meine django-App implementiert, damit sich Benutzer mit einer eindeutigen E-Mail-Adresse anmelden können. Dies hat jedoch meinen Django-Registrierungs-Workflow außer Kraft gesetzt.Django Registrierungsformular Bestätigungs-E-Mail

Idealerweise möchte ich dem Benutzer eine Bestätigungs-E-Mail senden, nachdem sich der Benutzer registriert hat - anstatt sie auf die Anmeldeseite umzuleiten. Ich bin mir nicht sicher, ob das etwas mit der Datei settings.py zu tun hat oder nicht.

models.py

class AccountUserManager(UserManager): 
    def _create_user(self, username, email, password, 
        is_staff, is_superuser, **extra_fields): 
     """ 
     Creates and saves a User with the given username, email and password. 
     """ 
     now = timezone.now() 
     if not email: 
      raise ValueError('The given username must be set') 

     email = self.normalize_email(email) 
     user = self.model(username=email, email=email, 
          is_staff=is_staff, is_active=True, 
          is_superuser=is_superuser, 
          date_joined=now, **extra_fields) 
     user.set_password(password) 
     user.save(using=self._db) 

     return user 

class User(AbstractUser): 
    # now that we've abstracted this class we can add any 
    # number of custom attribute to our user class 

    # in later units we'll be adding things like payment details! 

    objects = AccountUserManager() 

forms.py

class UserRegistrationForm(UserCreationForm): 
    email = forms.EmailField(
     label='', 
     widget=forms.EmailInput(attrs={'placeholder': 'Email Address'}) 
    ) 
    password1 = forms.CharField(
     label='', 
     widget=forms.PasswordInput(attrs={'placeholder': 'Password'}) 
    ) 

    password2 = forms.CharField(
     label='', 
     widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password'}) 
    ) 

    class Meta: 
     model = User 
     fields = ['email', 'password1', 'password2'] 
     exclude = ['username'] 

    def clean_password2(self): 
     password1 = self.cleaned_data.get('password1') 
     password2 = self.cleaned_data.get('password2') 

     if password1 and password2 and password1 != password2: 
      message = "Passwords do not match" 
      raise ValidationError(message) 

     return password2 

    def save(self, commit=True): 
     instance = super(UserRegistrationForm, self).save(commit=False) 

     # automatically set to email address to create a unique identifier 
     instance.username = instance.email 

     if commit: 
      instance.save() 

     return instance 

views.py

def register(request, register_form=UserRegistrationForm): 
    if request.method == 'POST': 
     form = register_form(request.POST) 
     if form.is_valid(): 
      form.save() 

      user = auth.authenticate(email=request.POST.get('email'), 
            password=request.POST.get('password1')) 

      if user: 
       messages.success(request, "You have successfully registered") 
       return redirect(reverse('profile')) 

      else: 
       messages.error(request, "unable to log you in at this time!") 

    else: 
     form = register_form() 

    args = {'form':form} 
    args.update(csrf(request)) 

    return render(request, 'register.html', args) 

Antwort

1

Ich bin mir nicht sicher, ob Sie noch django-Registrierung verwenden möchten oder nicht ?

Wenn Sie weiterhin die Django-Registrierung verwenden möchten, ist die HMAC-Authentifizierung dokumentiert here.

Wenn nicht, müssen Sie selbst eine Mail senden. (z. B. mit django.core.mail), bevor die gerenderte Vorlage oder eine Weiterleitung zurückgegeben wird.

+1

Ich war mir nicht sicher, ob Sie noch die Registrierungsbestätigung von diesem Paket ziehen können. – Nick

+0

Nun, ich empfehle die Django-Registrierung wie vorgesehen zu verwenden (Ihr aktueller Code hat es überhaupt nicht benutzt, soweit ich das beurteilen kann) oder mache alles alleine. –

Verwandte Themen