好的,所以這是我提出的解決方案。它可能不是最漂亮的,但它爲我工作。
這是加入的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)
這是加入的forms.py
class ResendActivationEmailForm(forms.Form):
email = forms.EmailField(required=True)
我這是用來在註冊一個新的模板被稱爲resend_activation_email_form.html當電子郵件已被重新發送,但我已經使用完全相同的模板來發送電子郵件。
我基於電子郵件,因爲我已經使用了獨特的電子郵件,但它可能更合理的基於用戶名,因爲它被定義爲唯一的Django註冊。
您是否嘗試從註冊導入RegistrationProfile – marcusshep
您是什麼意思重新激活表單?這沒有任何意義。你的意思是重新發送激活郵件嗎?這可能是爲什麼你的問題沒有得到答覆之前,你發佈賞金 – e4c5
我已經嘗試導入RegistrationProfile和是的,我想重新發送(或發送一個新的)激活電子郵件 – HenryM