Python Django注册-一些激活
如何强制向用户重新发送激活电子邮件?例如,当他意外删除邮件时,他会点击我网站上的链接,django会给他发送新的激活电子邮件。这样做是有理由的。从: 如何重新发送激活电子邮件? 假设您使用的是默认后端,则会为此提供自定义管理操作;在RegistrationProfile模型的管理员中,只需单击要为其重新发送电子邮件的用户的复选框,然后选择“重新发送激活电子邮件”操作 没有内置的自动方式可以做到这一点(django registration如何判断随机访问者是3天前填写注册表并删除其激活邮件的人?)。我的(丑陋的)解决方案是创建我自己的登录视图:Python Django注册-一些激活,python,django,Python,Django,如何强制向用户重新发送激活电子邮件?例如,当他意外删除邮件时,他会点击我网站上的链接,django会给他发送新的激活电子邮件。这样做是有理由的。从: 如何重新发送激活电子邮件? 假设您使用的是默认后端,则会为此提供自定义管理操作;在RegistrationProfile模型的管理员中,只需单击要为其重新发送电子邮件的用户的复选框,然后选择“重新发送激活电子邮件”操作 没有内置的自动方式可以做到这一点(django registration如何判断随机访问者是3天前填写注册表并删除其激活邮件的人?
from django.contrib.auth.views import login as django_login
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
redirect_authenticated=None,
authentication_form=AuthenticationForm):
"""
Redirect to redirect_authenticated if user is authenticated or
delegate to contrib login otherwise.
"""
form = authentication_form(data=request.POST)
if request.method == "POST":
if not form.is_valid():
non_field_errors = form.non_field_errors()
if non_field_errors:
# test if the account is not active
user_inactive = non_field_errors[0].find(_("This account is inactive.")) != -1
if user_inactive:
return render_to_response(template_name, {
'form': form,
'user_inactive' : user_inactive,
}, context_instance=RequestContext(request))
return django_login(request, template_name=template_name,
redirect_field_name=redirect_field_name,
authentication_form=authentication_form)
然后使用模板中的上下文变量:
{% if user_inactive %}
<a href="/activation/resend/">Resend activation link</a>
{% else %}
<a href="{% url django.contrib.auth.views.password_reset %}">Forgot your password?</a>
{% endif %}
{%if user_inactive%}
{%else%}
{%endif%}
当用户单击“重新发送激活”链接时,会出现一个请求注册电子邮件的表单。提交表单会触发新帐户激活电子邮件
希望这有帮助。以下查看功能将呈现一个带有单个电子邮件字段的表单,然后检查是否有此电子邮件尚未激活的用户,如果过期,则重新创建激活代码(哈希内容已从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)
我更新了伊利亚b。方法重新发送\u激活\u电子邮件。旧方法显示python>=2.5中的sha弃用错误
def resend_activation_email(request):
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.")
for user in users:
for profile in RegistrationProfile.objects.filter(user=user):
if profile.activation_key_expired():
salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
profile.activation_key = hashlib.sha1(salt+user.email).hexdigest()
user.date_joined = datetime.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(request, 'registration/resend_activation_email_done.html', context)
if not form:
form = ResendActivationEmailForm()
context.update({"form" : form})
return render(request, 'registration/resend_activation_email_form.html', context)
你能提供更多的细节吗?什么链接?用户意外删除了电子邮件。然后,他登录到网站并点击链接,然后重新向他发送激活链接。我的问题是:我如何建立这种联系?Wtah应该在视图文件中。不幸的是,django注册集在用户单击链接之前处于活动状态,为False。默认的django登录函数检查以确保is_active为True。我也在寻找一种方法,允许用户登录并选择重新发送电子邮件。我认为这将需要对django注册进行重大更改,并添加一个带有另一个布尔字段的用户配置文件,以指示他们是否确认了他们的电子邮件。然后,当授权用户查看站点的受限部分时,您的站点必须选中此标志。用户可以登录,然后在其配置文件中单击“重新发送激活电子邮件”。。。很多网站都经常使用它。我应该把这个功能放在哪里?我不想更改下载的django registration版本,因此我已将我的应用程序的views.py(已将表单放入forms.py)中,并且我遇到以下错误:未定义全局名称“RegistrationProfile”,我将此函数放在何处?我不想更改下载的django registration版本,因此我已将我的应用程序的views.py(已将表单放入forms.py)中,并收到以下错误:未定义全局名称“RegistrationProfile”