Виджет PasswordInput
Виджет PasswordInput применяется для отображения поля ввода пароля в HTML-формах. Он наследуется от TextInput и по умолчанию устанавливает атрибут type="password", благодаря чему вводимые символы скрываются точками или звёздочками. Виджет может принимать параметры, позволяющие настроить его поведение, например, отключить автозаполнение или задать размер поля.
Синтаксис
from django import forms
class MyForm(forms.Form):
password = forms.CharField(widget=forms.PasswordInput)
Параметры
Виджет PasswordInput принимает следующие параметры:
-
attrs- словарь с HTML-атрибутами для тега ввода (например,'class','placeholder','id'); -
render_value- логический параметр, определяющий, будет ли отображаться значение поля при повторном рендеринге (по умолчаниюFalse); -
strip- логический параметр, управляющий удалением пробелов (по умолчаниюFalseдля этого виджета).
Пример . С кастомными атрибутами
Создадим форму с полем пароля, добавим класс и плейсхолдер:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(
widget=forms.PasswordInput(attrs={
'class': 'form-control',
'placeholder': 'Enter your password'
})
)
Пример . С рендерингом значения
Иногда требуется отображать введённый пароль при ошибках валидации. Для этого используем параметр render_value:
from django import forms
class ProfileForm(forms.Form):
old_password = forms.CharField(
widget=forms.PasswordInput(render_value=True)
)
new_password = forms.CharField(
widget=forms.PasswordInput(render_value=False)
)
Пример . Использование в представлении
Рассмотрим полный пример формы авторизации в представлении Django:
from django import forms
from django.shortcuts import render
from django.http import HttpResponse
class AuthForm(forms.Form):
login = forms.CharField(label='Login', max_length=50)
password = forms.CharField(
label='Password',
widget=forms.PasswordInput(attrs={
'class': 'pwd-field',
'autocomplete': 'off'
})
)
def login_view(request):
if request.method == 'POST':
form = AuthForm(request.POST)
if form.is_valid():
login = form.cleaned_data['login']
password = form.cleaned_data['password']
return HttpResponse(f"User {login} authenticated")
else:
form = AuthForm()
return render(request, 'login.html', {'form': form})
Результат рендеринга поля в HTML:
<input type="password" name="password" class="pwd-field" autocomplete="off" required id="id_password">
Пример . С изменением размера поля
Зададим размер и максимальную длину поля ввода пароля:
from django import forms
class RegistrationForm(forms.Form):
password = forms.CharField(
max_length=32,
widget=forms.PasswordInput(attrs={
'size': '40',
'maxlength': '32'
})
)
Смотрите также
-
виджет
TextInput,
стандартное текстовое поле ввода -
виджет
Textarea,
многострочное поле для ввода текста -
виджет
EmailInput,
поле для ввода email-адреса -
виджет
HiddenInput,
скрытое поле для передачи данных