Задать вопрос
@autumnfall

Как реализовать подтверждение почты по коду Django?

Как в форме регистрации сделать поле для шестизначного кода, который пришёл на почту(подтвердить эмеил)? Написал код, который генерирует и сохраняет в базе данных шестизначный код, привязанный к пользователю. Так вот как реализовать подтверждение почты по этому коду? (В табличке юезров сделал флаг, который при успешном подтверждении ставится в True)

views.py
class RegistrationUserView(CreateView):
    template_name = 'users/registration.html'
    form_class = RegistrationUserForm

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('homepage')


forms.py
class RegistrationUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

def save(self, commit=True):
    user = super(RegistrationUserForm, self).save(commit=True)
    record = EmailVerification.objects.create(code=random.randint(100_000, 999_999), user=user)
    record.send_verification_email()
    return user


models.py
class User(AbstractUser):
    is_verified_email = models.BooleanField(default=False)

class EmailVerification(models.Model):
    code = models.CharField(max_length=6, unique=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return f'EmailVerification for {self.user.email}'

def send_verification_email(self):
    send_mail(
        'Subject here',
        f'Verification code: {self.code}',
        'from@example.com',
        [self.user.email],
        fail_silently=False,
    )
  • Вопрос задан
  • 604 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Чего же проще, сделайте эндроинт, который в параметрах запроса GET принимает посланный на почту ключик.
В письме давайте сформированную ссылку на этот эндпоинт с клбчиком.
Ну или можно просто форму ввода сделать с одним полем для ввода ключа.
Примерно так
<br>
<a href="https://mysite.com/myendpoint?key=12345-5566">Подтвердить</a><br>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы