Как расширить формы авторизации Django?

Для расширения формы авторизации в Django можно использовать несколько подходов. Один из самых простых — создать собственную форму на основе уже существующей формы авторизации Django и добавить в нее необходимые поля.

Вот пример:

from django.contrib.auth.forms import AuthenticationForm
from django import forms

class ExtendedAuthenticationForm(AuthenticationForm):
    # Добавляем новое поле для ввода
    email = forms.EmailField()

    # Можно добавить дополнительные поля по аналогии

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Переопределяем отображаемое имя поля
        self.fields['username'].label = 'Username or Email'

    # Переопределяем метод clean для обработки нового поля
    def clean(self):
        cleaned_data = super().clean()
        
        # Присваиваем значение email из поля username
        email = cleaned_data.get('username')
        cleaned_data['email'] = email

        return cleaned_data

В этом примере мы создаем класс ExtendedAuthenticationForm, наследуясь от AuthenticationForm. Затем добавляем новое поле email типа EmailField. В __init__ мы переопределяем отображаемое имя поля username для вывода в HTML-форме. В методе clean мы присваиваем значение введенное в поле username значению поля email.

Чтобы использовать расширенную форму авторизации, вам нужно указать ее в настройках Django в settings.py:

AUTHENTICATION_FORM = 'myapp.forms.ExtendedAuthenticationForm'

Где 'myapp.forms.ExtendedAuthenticationForm' — это путь к вашему классу формы.

Если вы хотите добавить дополнительные поля или изменить внешний вид формы с помощью определенного CSS или HTML, то вам также потребуется создать соответствующий шаблон (template) и включить его в вашу HTML-страницу.

В общем, расширение форм авторизации Django дает вам гибкость добавлять и настраивать поля формы и их обработку в зависимости от ваших потребностей.