首页 > 解决方案 > 你好。我正在做一个 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 中。

标签: pythondjango

解决方案


class SomeModel(models.Model):
    myvariable = model.IntegerField(validators=[MinValueValidator(18)])

我假设您在提交数据之前也在表单中进行验证检查。


推荐阅读