Исходный код core.forms

"""
Формы аутентификации и регистрации пользователей (forms.py).
Содержат кастомную валидацию безопасности, включая проверку паролей 
и алгоритм оценки схожести юзернеймов для защиты от фишинга.
"""

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from difflib import SequenceMatcher


[документация] class RegisterForm(forms.Form): """Форма регистрации нового аккаунта с продвинутыми проверками безопасности.""" username = forms.CharField(max_length=150) email = forms.EmailField() password = forms.CharField(widget=forms.PasswordInput) password2 = forms.CharField(widget=forms.PasswordInput)
[документация] def clean_username(self): """ Кастомная валидация юзернейма. Запрещает регистрацию имён, которые похожи на уже существующие более чем на 80% (дистанция Левенштейна / SequenceMatcher). """ username = self.cleaned_data["username"] for user in User.objects.all(): if SequenceMatcher(None, user.username.lower(), username.lower()).ratio() > 0.8: raise forms.ValidationError("Такое имя пользователя уже занято или слишком похоже на существующее.") return username
[документация] def clean(self): """Общая проверка формы. Убеждается, что основной и повторный пароли совпадают.""" cleaned_data = super().clean() if cleaned_data.get("password") != cleaned_data.get("password2"): raise forms.ValidationError("Пароли не совпадают.") return cleaned_data
[документация] class LoginForm(AuthenticationForm): """Форма авторизации пользователей с применением стилей Bootstrap классов.""" username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'})) password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control'}))