2016-05-18 107 views
5

我使用django-registration與唯一的電子郵件地址,我希望能夠發送第二個激活表單發送到一封電子郵件,如果用戶的要求,如果該帳戶尚未激活。我在Stackoverflow上發現了這個link,但我不明白我應該把例程放在哪裏。我已經把它放在我的應用程序的views.py,我得到的錯誤Django註冊重新激活電子郵件與新代碼

global name 'RegistrationProfile' is not defined 

這是因爲RegistrationProfile是註冊一個模型,但它並不在我的數據庫時激活創建表/記錄表單被髮送,所以我不明白我如何訪問它。

任何建議將受到歡迎。

+0

您是否嘗試從註冊導入RegistrationProfile – marcusshep

+0

您是什麼意思重新激活表單?這沒有任何意義。你的意思是重新發送激活郵件嗎?這可能是爲什麼你的問題沒有得到答覆之前,你發佈賞金 – e4c5

+0

我已經嘗試導入RegistrationProfile和是的,我想重新發送(或發送一個新的)激活電子郵件 – HenryM

回答

2

好的,所以這是我提出的解決方案。它可能不是最漂亮的,但它爲我工作。

這是加入的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註冊。

相關問題