/
Anubis55
/
Web-Polytech
Обзор
Документация
Войти
/
Anubis55
/
Web-Polytech
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
comics/forms.py
148 строк
5 KB
Anubis55
добавлены докстринги и аннотации к методам, классам
25 июн 2026, 07:23
25 июн 2026, 07:23
060db92
Код
Авторство
О чём код?
from typing import Any, Dict, Optional, List from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.core.exceptions import ValidationError from .models import Comment class CustomUserCreationForm(UserCreationForm): """ Форма регистрации с валидацией имени пользователя. """ class Meta: model = User fields = ('username', 'password1', 'password2') def __init__(self, *args: Any, **kwargs: Any) -> None: """ Инициализирует форму и добавляет CSS-классы и подсказки. Args: *args: Дополнительные позиционные аргументы. **kwargs: Дополнительные именованные аргументы. """ super().__init__(*args, **kwargs) self.fields['username'].help_text = 'Только буквы, цифры.' self.fields['password1'].help_text = 'Минимум 8 символов, не слишком простой.' self.fields['password2'].help_text = 'Введите пароль ещё раз для подтверждения.' self.fields['username'].widget.attrs.update({ 'class': 'form-control', 'placeholder': 'Имя пользователя' }) self.fields['password1'].widget.attrs.update({ 'class': 'form-control', 'placeholder': 'Пароль' }) self.fields['password2'].widget.attrs.update({ 'class': 'form-control', 'placeholder': 'Подтверждение пароля' }) def clean_username(self) -> str: """ Проверяет, что имя пользователя не содержит оскорбительных слов. Returns: str: Проверенное имя пользователя. Raises: ValidationError: Если имя занято или содержит запрещённые слова. """ username = self.cleaned_data['username'] if User.objects.filter(username=username).exists(): raise ValidationError('Пользователь с таким именем уже существует.') forbidden_words = ['дурак', 'идиот', 'дебил', 'урод', 'козел', 'Иисус', 'член'] username_lower = username.lower() for word in forbidden_words: if word in username_lower: raise ValidationError('Имя пользователя содержит недопустимые слова.') return username class CommentForm(forms.ModelForm): """ Форма для создания и редактирования комментария. """ class Meta: model = Comment fields = ['text'] widgets = { 'text': forms.Textarea(attrs={ 'rows': 3, 'placeholder': 'Ваш комментарий...', 'class': 'comment-f' }), } labels = {'text': '',} help_texts = {'text': 'Будьте вежливы.'} error_messages = { 'text': {'required': 'Ошибка!',}, } class Media: css = {'all': ('comics/css/comment_form.css',)} class ContactForm(forms.Form): """ Форма обратной связи с возможностью прикрепления файлов. """ name = forms.CharField( max_length=100, label='Ваше имя', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Введите ваше имя' }) ) email = forms.EmailField( label='Email', widget=forms.EmailInput(attrs={ 'class': 'form-control', 'placeholder': 'example@mail.ru' }) ) message = forms.CharField( label='Сообщение', widget=forms.Textarea(attrs={ 'class': 'form-control', 'rows': 5, 'placeholder': 'Ваше сообщение...' }) ) file1 = forms.FileField( label='Файл 1', required=False, widget=forms.FileInput(attrs={'class': 'form-control'}) ) file2 = forms.FileField( label='Файл 2', required=False, widget=forms.FileInput(attrs={'class': 'form-control'}) ) file3 = forms.FileField( label='Файл 3', required=False, widget=forms.FileInput(attrs={'class': 'form-control'}) ) file4 = forms.FileField( label='Файл 4', required=False, widget=forms.FileInput(attrs={'class': 'form-control'}) ) file5 = forms.FileField( label='Файл 5', required=False, widget=forms.FileInput(attrs={'class': 'form-control'}) ) class UploadFileForm(forms.Form): """ Тестовая форма для загрузки одного файла. """ file = forms.FileField(label='Выберите файл')