/
kasane
/
library
Обзор
Документация
Войти
/
kasane
/
library
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main/forms.py
92 строки
3 KB
zahar
тестирую
01 апр 2026, 01:01
01 апр 2026, 01:01
bf593e3
Код
Авторство
О чём код?
from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, PasswordResetForm, SetPasswordForm from django.contrib.auth.models import User from django.contrib.auth import get_user_model from django.core.exceptions import ValidationError from main.models import Book User = get_user_model() class CustomUserCreationForm(UserCreationForm): first_name = forms.CharField(max_length=30, required=True, label='Имя') last_name = forms.CharField(max_length=30, required=True, label='Фамилия') email = forms.EmailField(required=True, label='Email') class Meta: model = User fields = ('first_name', 'last_name', 'email') def clean_email(self): email = self.cleaned_data.get('email') if User.objects.filter(email=email).exists(): raise ValidationError('Пользователь с таким email уже существует.') return email def save(self, commit=True): user = super().save(commit=False) user.first_name = self.cleaned_data['first_name'] user.last_name = self.cleaned_data['last_name'] user.email = self.cleaned_data['email'] base_username = self.cleaned_data['email'] username = base_username counter = 1 while User.objects.filter(username=username).exists(): username = f"{base_username}{counter}" counter += 1 user.username = username if commit: user.save() return user class EmailAuthenticationForm(AuthenticationForm): username = forms.EmailField(label='Email', max_length=254) error_messages = { 'invalid_login': "Неверный email или пароль. Попробуйте снова.", } class UserProfileForm(forms.ModelForm): class Meta: model = User fields = ['first_name', 'last_name', 'email'] widgets = { 'first_name': forms.TextInput(attrs={'class': 'form-input'}), 'last_name': forms.TextInput(attrs={'class': 'form-input'}), 'email': forms.EmailInput(attrs={'class': 'form-input'}), } class BookForm(forms.ModelForm): class Meta: model = Book fields = ['title', 'author', 'isbn', 'publication_date', 'status', 'image'] widgets = { 'publication_date': forms.DateInput(attrs={'type': 'date'}), 'image': forms.FileInput(attrs={'accept': 'image/*'}), } from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm class CustomPasswordResetForm(PasswordResetForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs.update({'class': 'form-input'}) def send_mail(self, subject_template_name, email_template_name, context, from_email, to_email, html_email_template_name=None): html_email_template_name = 'password_reset_email.html' super().send_mail( subject_template_name, email_template_name, context, from_email, to_email, html_email_template_name=html_email_template_name, ) class CustomSetPasswordForm(SetPasswordForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs.update({'class': 'form-input'})