OK, also das ist die Lösung, die ich mir ausgedacht habe. Es ist vielleicht nicht das Schönste, aber es funktioniert für mich.
Dies wird hinzugefügt
from .forms import ResendActivationEmailForm
from django.core import signing
from django.contrib.sites.shortcuts import get_current_site
from django.template.loader import render_to_string
def resend_activation_email(request):
email_body_template = 'registration/activation_email.txt'
email_subject_template = 'registration/activation_email_subject.txt'
if not request.user.is_anonymous():
return HttpResponseRedirect('/')
context = Context()
form = None
if request.method == 'POST':
form = ResendActivationEmailForm(request.POST)
if form.is_valid():
email = form.cleaned_data["email"]
users = User.objects.filter(email=email, is_active=0)
if not users.count():
form._errors["email"] = ["Account for email address is not registered or already activated."]
REGISTRATION_SALT = getattr(settings, 'REGISTRATION_SALT', 'registration')
for user in users:
activation_key = signing.dumps(
obj=getattr(user, user.USERNAME_FIELD),
salt=REGISTRATION_SALT,
)
context = {}
context['activation_key'] = activation_key
context['expiration_days'] = settings.ACCOUNT_ACTIVATION_DAYS
context['site'] = get_current_site(request)
subject = render_to_string(email_subject_template,
context)
# Force subject to a single line to avoid header-injection
# issues.
subject = ''.join(subject.splitlines())
message = render_to_string(email_body_template,
context)
user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
return render(request, 'registration/resend_activation_email_done.html')
if not form:
form = ResendActivationEmailForm()
context.update({"form" : form})
return render(request, 'registration/resend_activation_email_form.html', context)
Dieses hinzugefügt views.py wird
class ResendActivationEmailForm(forms.Form):
email = forms.EmailField(required=True)
Ich habe eine neue Vorlage in Registrierung resend_activation_email_form.html aufgerufen forms.py, die verwendet wird, wenn die E-Mail wurde erneut gesendet, aber ich habe genau die gleiche Vorlage verwendet, um die E-Mail zu senden.
Ich habe dies auf E-Mail basiert, weil ich einzigartige E-Mails verwenden, aber es ist möglicherweise sinnvoller, es auf den Benutzernamen zu basieren, da dies von Django-Registrierung als einzigartig definiert ist.
Haben Sie versucht, RegistrationProfile aus Registrierung – marcusshep
zu importieren, was meinst du Formular erneut senden? Das ergibt keinen Sinn. Meinten Sie, Aktivierungs-E-Mails erneut zu senden? Dies ist wahrscheinlich, warum Ihre Frage keine Antwort erhalten, bevor Sie die Bounty ausgegeben – e4c5
Ich habe versucht Import RegistrationProfile und ja, ich möchte erneut senden (oder senden Sie eine neue) Aktivierungs-E-Mail – HenryM