Виджет PasswordInput

Виджет PasswordInput применяется для отображения поля ввода пароля в HTML-формах. Он наследуется от TextInput и по умолчанию устанавливает атрибут type="password", благодаря чему вводимые символы скрываются точками или звёздочками. Виджет может принимать параметры, позволяющие настроить его поведение, например, отключить автозаполнение или задать размер поля.

Синтаксис

pythonfrom django import forms

class MyForm(forms.Form):
  password = forms.CharField(widget=forms.PasswordInput)

Параметры

Виджет PasswordInput принимает следующие параметры:

Пример . С кастомными атрибутами

Создадим форму с полем пароля, добавим класс и плейсхолдер:

pythonfrom 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:

pythonfrom 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:

pythonfrom 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:

python<input type="password" name="password" class="pwd-field" autocomplete="off" required id="id_password">

Пример . С изменением размера поля

Зададим размер и максимальную длину поля ввода пароля:

pythonfrom 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,
    скрытое поле для передачи данных