Что такое аутентификация на основе пароля в UserCreationForm в Django и как ее удалить?

Я создал форму, которая наследуется от UserCreationForm, и использую представление на основе классов, которое наследует CreateView, и когда я использую сервер выполнения и отображаю форму, внизу есть раздел Аутентификация на основе пароля, которую я не замечаю

формы.py

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm


class RegisterForm(UserCreationForm):
    """Form to Create new User"""

    class Meta:
        model = get_user_model()
        fields = ["username", "password1", "password2"]

view.py

from django.views.generic import CreateView

from .forms import RegisterForm

from django.urls import reverse_lazy

class SignUp(CreateView):
    form_class = RegisterForm
    template_name = "register.html"
    success_url = reverse_lazy("core:Login")
    def form_valid(self, form):
        user = form.save()
        if user:
            login(self.request, user)
        return super().form_valid(form)

регистр.html

<h1>signup</h1>

    {{form}}

И когда я запустил код, я увидел этот вывод

Поэтому я не ожидал аутентификации на основе пароля.

Мой вопрос о

  1. Что именно это такое?
  2. Должно ли это отображаться здесь?
  3. Как мне это скрыть?

🤔 А знаете ли вы, что...
Python поддерживает динамическую типизацию, что облегчает разработку.


5
60
1

Ответ:

Решено

Начиная с версии Django 5.1, UserCreationForm по умолчанию имеет поле usable_password. Это относится к функции Django для установки неиспользуемых паролей для пользователей. Это полезно, если вы используете какую-либо внешнюю аутентификацию, например единый вход или LDAP.

Поскольку ваша форма, похоже, обращена к пользователю, и показывать это поле вашему пользователю не имеет особого смысла (эта конкретная форма по умолчанию больше ориентирована на использование на сайте администратора), вам следует просто удалить поле из формы, установив это None:

class RegisterForm(UserCreationForm):
    """Form to Create new User"""
    usable_password = None

    class Meta:
        model = get_user_model()
        fields = ["username", "password1", "password2"]