python - 你好。我正在做一个 django 项目。我有一个注册页面,我想在其中包含电子邮件地址验证
问题描述
我的注册页面接受用户名、电子邮件和密码。我想在其中包含电子邮件地址验证。将发送到用户电子邮件 ID 的链接,然后在他们验证后,注册过程完成。
signup.html
{% extends 'fir/base_visitor.html' %}
{% block title %}Sign Up{% endblock %}
{% block signup_active %}active{% endblock %}
{% block body %}
<div class="container-fluid">
<div class="row">
<div class="col-sm-12 col-md-6">
<div class="panel panel-default">
<div class="panel-body">
<h3>Sign up for an Account</h3>
{% if error_message %}
<p><strong>{{ error_message }}</strong></p>
{% endif %}
<form class="form-horizontal" role="form" action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% include 'fir/form_template.html' %}
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">Submit</button>
</div>
</div>
</form>
</div>
<div class="panel-footer">
Already have an account? <a href="{% url 'fir:signin_user' %}">Click here</a> to sign in.
</div>
</div>
</div>
</div>
</div>
{% endblock %}
views.py
def signup(request):
form = UserForm(request.POST or None)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
evidences = Evidence.objects.filter(user=request.user)
return render(request, 'fir/index.html', {'evidences': evidences})
context = {
"form": form,
}
return render(request, 'fir/signup.html', context)
This is for activation and I also have used tokens.
def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
login(request, user)
return HttpResponse('Thank you for your email confirmation. Now you can login to your account.')
else:
return HttpResponse('Activation link is invalid!')
我还在我的模板中包含了 acc_active_email.html 和 acc_active_sent.html。现在,在views.py 的注册部分,如何编辑我的代码以添加这些代码行?
current_site = get_current_site(request)
message = render_to_string('acc_active_email.html', {
'user':user, 'domain':current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': account_activation_token.make_token(user),
})
# Sending activation link in terminal
# user.email_user(subject, message)
mail_subject = 'Activate your blog account.'
to_email = form.cleaned_data.get('email')
email = EmailMessage(mail_subject, message, to=[to_email])
email.send()
return HttpResponse('Please confirm your email address to complete the registration.')
而且,我还在 settings.py 中包含了电子邮件 tls 的内容。请帮帮我。谢谢。而且,所有内容也都正确添加到了 urls.py 中。
解决方案
class SomeModel(models.Model):
myvariable = model.IntegerField(validators=[MinValueValidator(18)])
我假设您在提交数据之前也在表单中进行验证检查。
推荐阅读
- dart - 如何将图像保存到外部目录 - iOS?
- html - 如何同时在盒子上悬停和过渡?只使用 css 和 html
- c++ - 退出函数时 JsonCpp 抛出 LogicError
- python - 为什么我的语法无效?
- apache-spark - 使用 spark-defaults.conf 文件在 jupyter notebook 中初始化 pyspark
- c# - 将视图绑定到视图模型并在 Xamarin.Forms 中显示为对话框页面?
- html - 右导航栏向下滚动
- javascript - 导出 PapaParse 函数的问题
- html - 从布局组件对齐 Antd 的右键菜单
- bash - IBM Cloud CLI 的 Bash 自动完成?