Django注册 - 一些激活

DJp*_*hon 5 python django

如何强制向用户重新发送激活电子邮件?例如,当他意外删除邮件时,他点击我网站上的链接,django将向他发送新的激活电子邮件.

Ben*_*end 8

这样做有一个管理员操作.来自django-registration docs:

如何重新发送激活邮件?

假设您使用默认后端,则为此提供自定义管理操作; 在RegistrationProfile模型的管理员中,只需单击您要为其重新发送电子邮件的用户的复选框,然后选择"重新发送激活电子邮件"操作.

没有内置的自动方式(django-registration应该如何确定随机访问者是3天前填写注册表并删除了他的激活邮件的人?).

  • 他可以登录,并在他的个人资料中点击"重新发送激活电子邮件"...它经常在许多网站上使用. (8认同)

ily*_* b. 5

以下视图函数将呈现具有单个电子邮件字段的表单,然后检查是否有任何用户尚未激活此电子邮件,如果已过期则重新创建激活码(散列内容是从RegistrationProfile复制的)并最终发送激活电子邮件.

class ResendActivationEmailForm(forms.Form):
    email = EmailField(required=True)

def resend_activation_email(request):
    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."),)

            for user in users:
                for profile in RegistrationProfile.objects.filter(user=user):
                    if profile.activation_key_expired():
                        salt = sha_constructor(str(random())).hexdigest()[:5]
                        profile.activation_key = sha_constructor(salt+user.username).hexdigest()
                        user.date_joined = datetime.now()
                        user.save()
                        profile.save()

                    if Site._meta.installed:
                        site = Site.objects.get_current()
                    else:
                        site = RequestSite(request)

                    profile.send_activation_email(site)

                    context.update({"form" : form})
                    return render_to_response("registration/resend_activation_email_done.html", context)

    if not form:
        form = ResendActivationEmailForm()

    context.update({"form" : form})
    return render_to_response("registration/resend_activation_email_form.html", context)
Run Code Online (Sandbox Code Playgroud)