/
tro37295
/
Learnone
Обзор
Документация
Войти
/
tro37295
/
Learnone
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
ficha
modules/system/forms.py
188 строк
7 KB
George Trofimov
Реализована каптча
21 мар 2024, 14:54
21 мар 2024, 14:54
c5d6cb6
Код
Авторство
О чём код?
from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm, SetPasswordForm, PasswordResetForm from django.contrib.auth.models import User from django.conf import settings from captcha.fields import ReCaptchaField from captcha.widgets import ReCaptchaV2Checkbox from .models import Profile, Feedback class UserRegisterForm(UserCreationForm): """ Переопределенная форма регистрации пользователей """ class Meta(UserCreationForm.Meta): fields = UserCreationForm.Meta.fields + ('email', 'first_name', 'last_name') recaptcha = ReCaptchaField(widget=ReCaptchaV2Checkbox, public_key=settings.RECAPTCHA_PUBLIC_KEY, private_key=settings.RECAPTCHA_PRIVATE_KEY, label='ReCAPTCHA') def clean_email(self): """ Проверка email на уникальность """ email = self.cleaned_data.get('email') username = self.cleaned_data.get('username') if email and User.objects.filter(email=email).exclude(username=username).exists(): raise forms.ValidationError('Такой email уже используется в системе') return email def __init__(self, *args, **kwargs): """ Обновление стилей формы регистрации """ super().__init__(*args, **kwargs) for field in self.fields: self.fields['username'].widget.attrs.update({"placeholder": 'Придумайте свой логин'}) self.fields['email'].widget.attrs.update({"placeholder": 'Введите свой email'}) self.fields['first_name'].widget.attrs.update({"placeholder": 'Ваше имя'}) self.fields['last_name'].widget.attrs.update({"placeholder": 'Ваша фамилия'}) self.fields['password1'].widget.attrs.update({"placeholder": 'Придумайте свой пароль'}) self.fields['password2'].widget.attrs.update({"placeholder": 'Повторите свой пароль'}) self.fields[field].widget.attrs.update({"class": "form-control", "autocomplete": "off"}) class UserLoginForm(AuthenticationForm): """ Форма авторизации на сайте """ recaptcha = ReCaptchaField(widget=ReCaptchaV2Checkbox, public_key=settings.RECAPTCHA_PUBLIC_KEY, private_key=settings.RECAPTCHA_PRIVATE_KEY, label='ReCAPTCHA') def __init__(self, *args, **kwargs): """ Обновление стилей формы регистрации """ super().__init__(*args, **kwargs) for field in self.fields: self.fields['username'].widget.attrs['placeholder'] = 'Логин пользователя' self.fields['password'].widget.attrs['placeholder'] = 'Пароль пользователя' self.fields['username'].label = 'Логин' self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) class UserUpdateForm(forms.ModelForm): """ Форма обновления данных пользователя """ class Meta: model = User fields = ('username', 'email', 'first_name', 'last_name') def __init__(self, *args, **kwargs): """ Обновление стилей формы под bootstrap """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) def clean_email(self): """ Проверка на уникальность email """ email = self.cleaned_data.get('email') username = self.cleaned_data.get('username') if email and User.objects.filter(email=email).exclude(username=username).exists(): raise forms.ValidationError('Такое email адрес уже используется') return email class ProfileUpdateForm(forms.ModelForm): """ Форма обновления данных профиля пользователя """ class Meta: model = Profile fields = ('slug', 'birth_date', 'bio', 'avatar') def __init__(self, *args, **kwargs): """ Обновление стилей формы обновления """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) class UserPasswordChangeForm(SetPasswordForm): """ Форма изменения пароля """ def __init__(self, *args, **kwargs): """ Обновление стилей формы """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) class UserForgotPasswordForm(PasswordResetForm): """ Запрос на восстановление пароля """ recaptcha = ReCaptchaField(widget=ReCaptchaV2Checkbox, public_key=settings.RECAPTCHA_PUBLIC_KEY, private_key=settings.RECAPTCHA_PRIVATE_KEY, label='ReCAPTCHA') def __init__(self, *args, **kwargs): """ Обновление стилей формы """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) class UserSetNewPasswordForm(SetPasswordForm): """ Изменение пароля пользователя после подтверждения """ def __init__(self, *args, **kwargs): """ Обновление стилей формы """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({ 'class': 'form-control', 'autocomplete': 'off' }) class FeedbackCreateForm(forms.ModelForm): """ Форма отправки обратной связи """ class Meta: model = Feedback fields = ('subject', 'email', 'content') def __init__(self, *args, **kwargs): """ Обновление стилей формы """ super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs.update({'class': 'form-control', 'autocomplete': 'off'})