【问题标题】:Is there way to confirm user email when user change his email - django当用户更改他的电子邮件时,有没有办法确认用户电子邮件 - django
【发布时间】:2021-04-16 20:37:10
【问题描述】:

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

  • 我正在使用 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()

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

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

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 2021-06-16
      相关资源
      最近更新 更多