Python 当用户更改电子邮件时,是否有方法确认用户电子邮件-django

Python 当用户更改电子邮件时,是否有方法确认用户电子邮件-django,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我有一个选项,允许用户在其个人资料中更改电子邮件,但不确认新电子邮件,因此当他输入新电子邮件时,我希望激活电子邮件以将其保存在其个人资料中,如何添加确认 我正在使用UserCreationForm models.py: from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispat

我有一个选项,允许用户在其个人资料中更改电子邮件,但不确认新电子邮件,因此当他输入新电子邮件时,我希望激活电子邮件以将其保存在其个人资料中,如何添加确认

  • 我正在使用UserCreationForm
models.py:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    email_confirmed = models.BooleanField(default=False)

@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
        instance.profile.save()
我的代码| forms.py:

# Profile Form
class EmailChangeForm(forms.ModelForm):
    email = forms.EmailField(required=True,label='Email',widget=forms.EmailInput(attrs={'class': 'form-control center container','style': 'width:85%;text-align: center;background-color:#f6f6f6','placeholder':' Enter Your New E-mail '}) )
    class Meta:
        model = User
        fields = [
            'email',
            ]
    def clean_email(self):
        email = self.cleaned_data.get('email')
        if email and User.objects.filter(email=email).count():          raise forms.ValidationError('Email is already in use, please check the email or use another email')
        return email
views.py:

# Edit Profile View
class EmailChange(UpdateView):
    model = User
    form_class = EmailChangeForm
    success_url = reverse_lazy('home')
    template_name = 'user/commons/EmailChange.html'
    def get_object(self, queryset=None):
        return self.request.user
URL.py:

from django.urls import path
from blog_app.views import SignUpView, ProfileView, ActivateAccount,EmailChange

urlpatterns = [
    path('profile/change-email/me/', EmailChange.as_view(), name='emailchange'),
]
html页面:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" class="fadeIn fourth" style="background-color:#7952b3" value=" change ">
</form>

{%csrf_令牌%}
{{form.as_p}}

当用户添加新电子邮件时,下一步是添加激活吗?

以下是电子邮件激活的大致思路。首先,您需要设置邮件服务器/smtp服务器。然后在模型中添加一个新字段,用于更改电子邮件时生成的哈希。当用户更改其电子邮件时,显示持久消息以向其电子邮件帐户发送确认电子邮件,您可以使用django的消息框架来完成此操作。单击发送电子邮件后,您可以显示消息,让用户确认电子邮件并激活帐户。然后在views.py中创建一个函数和一个url路由,以验证散列并激活帐户。发送给用户的电子邮件中的url将包含您使用更改电子邮件时生成的哈希值创建的用于激活的路由。您可以使用现有的布尔字段检查电子邮件是否经过验证