OK, więc to jest rozwiązanie, które wymyśliłem. Może nie jest najładniejsza, ale działa dla mnie.
ten jest dodawany do views.py
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)
ten jest dodawany do forms.py
class ResendActivationEmailForm(forms.Form):
email = forms.EmailField(required=True)
mam nowy szablon w rejestracji nazywa resend_activation_email_form.html który jest używany, gdy e-mail został wysłany ponownie, ale użyłem dokładnie tego samego szablonu, aby wysłać wiadomość e-mail.
Oparłem to na wiadomościach e-mail, ponieważ korzystam z unikatowych wiadomości e-mail, ale rozsądniej jest oprzeć je na nazwie użytkownika, ponieważ jest to zdefiniowane jako unikalne przez rejestrację django.
Czy próbowałeś zaimportować RegistrationProfile z rejestracji – marcusshep
co masz na myśli ponownie w formularzu aktywacyjnym? To nie ma sensu. Czy chodziło Ci o e-mail aktywacyjny do ponownego wysłania? Prawdopodobnie dlatego twoje pytanie nie dostało odpowiedzi, zanim wydałeś nagrodę – e4c5
Próbowałem zaimportować RegistrationProfile i tak, chcę wysłać (lub wysłać nowy) email aktywacyjny – HenryM