当用户更改电子邮件时,有没有办法确认用户电子邮件 - django

时间:2021-04-16 20:37:10

标签: python django django-models django-forms

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

  • 我正在使用 UserCreationForm

模型.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()

我的代码 |表单.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

urls.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>

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

1 个答案:

答案 0 :(得分:0)

这里有一个关于电子邮件激活的粗略想法。首先你需要设置你的邮件服务器/smtp 服务器。然后在您的模型中为哈希添加一个新字段,该字段将在更改电子邮件时生成。当用户更改他/她的电子邮件时,显示持久消息以向他的电子邮件帐户发送确认电子邮件,您可以使用 django 的消息框架来做到这一点。点击发送邮件后,您可以显示消息让用户确认邮件并激活帐户。然后在 views.py 中创建一个函数以及一个 url 路由来验证哈希并激活帐户。在电子邮件中发送给用户的 url 将包含您为激活创建的路由,其中​​包含更改电子邮件时生成的哈希值。您可以使用现有的布尔字段来检查电子邮件是否经过验证。

相关问题