Для реализации подтверждения почты по коду в Django можно использовать следующий подход:
1. Создание модели для сохранения информации о пользователе и коде подтверждения:
from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager class MyUserManager(BaseUserManager): def create_user(self, email, password=None, **extra_fields): if not email: raise ValueError('The Email field must be set') email = self.normalize_email(email) user = self.model(email=email, **extra_fields) user.set_password(password) user.save() return user def create_superuser(self, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_superuser', True) return self.create_user(email, password, **extra_fields) class MyUser(AbstractBaseUser): email = models.EmailField(unique=True) is_active = models.BooleanField(default=False) is_staff = models.BooleanField(default=False) objects = MyUserManager() USERNAME_FIELD = 'email' def get_full_name(self): # Метод, возвращающий полное имя пользователя pass def get_short_name(self): # Метод, возвращающий сокращенное имя пользователя pass
2. Создание сервиса, который будет генерировать и отправлять код подтверждения по электронной почте:
from django.core.mail import send_mail from django.conf import settings import random class EmailConfirmationService: @staticmethod def send_confirmation_code(user): code = random.randint(100000, 999999) user.email_confirmation_code = code user.save() message = f"Your confirmation code is: {code}" send_mail( 'Confirmation Email', message, settings.DEFAULT_FROM_EMAIL, [user.email], fail_silently=False, )
3. Создание представления, которое будет обрабатывать запрос на подтверждение почты:
from django.views import View from django.shortcuts import redirect, render from .services import EmailConfirmationService class EmailConfirmationView(View): def get(self, request): # Отобразить форму ввода кода return render(request, 'confirmation.html') def post(self, request): code = int(request.POST.get('code', 0)) if request.user.email_confirmation_code == code: request.user.is_active = True request.user.save() return redirect('home') # Некорректный код, повторный запрос return redirect('confirm_email')
4. Создание URL-маршрута для представления обработки подтверждения почты:
from django.urls import path from .views import EmailConfirmationView urlpatterns = [ path('confirm-email/', EmailConfirmationView.as_view(), name='confirm_email'), ]
5. Включение URLs приложения в основной файл urls.py
:
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('', include('myapp.urls')), ]
Теперь, при регистрации пользователя, вы можете использовать EmailConfirmationService
для отправки кода подтверждения по электронной почте. После этого, представление EmailConfirmationView
обрабатывает введенный код и активирует учетную запись пользователя.