¿Cómo extiendo el formulario de "inicio de sesión" de Django?

Entonces, ahora estoy haciendo el inicio de sesión básico. En urls.py, voy a django contrib login:

(r'^login/?

Eso lo dispara hasta aquí:

@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm):

Esa vista utiliza el modelo de formularios AuthenticationForm:

class AuthenticationForm(forms.Form):
    """
    Base class for authenticating users. Extend this to get a form that accepts
    username/password logins.
    """
    username = forms.CharField(label=_("Username"), max_length=30)
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)

Entonces...mi objetivo es cambiar el formulario de nombre de usuario! Al agregarle esto:widget = forms.TextInput(attrs={'placeholder': 'username'}). Eso es. Eso es todo lo que quiero agregar al cuadro de entrada de nombre de usuario. Pero, no quiero cambiar el archivo real django forms.py, ya que eso es parte de django contrib y me siento mal al cambiar ese archivo.

¿Qué debo hacer? ¿Debo crear un formulario que extienda AuthenticationForm? Si es así, ¿cómo importo eso? ¿Y cómo paso eso como argumento a través de mi urls.py? No se que hacer.

,'django.contrib.auth.views.login',{'template_name':'login.html'}),

Eso lo dispara hasta aquí:

@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm):

Esa vista utiliza el modelo de formularios AuthenticationForm:

class AuthenticationForm(forms.Form):
    """
    Base class for authenticating users. Extend this to get a form that accepts
    username/password logins.
    """
    username = forms.CharField(label=_("Username"), max_length=30)
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)

Entonces...mi objetivo es cambiar el formulario de nombre de usuario! Al agregarle esto:widget = forms.TextInput(attrs={'placeholder': 'username'}). Eso es. Eso es todo lo que quiero agregar al cuadro de entrada de nombre de usuario. Pero, no quiero cambiar el archivo real django forms.py, ya que eso es parte de django contrib y me siento mal al cambiar ese archivo.

¿Qué debo hacer? ¿Debo crear un formulario que extienda AuthenticationForm? Si es así, ¿cómo importo eso? ¿Y cómo paso eso como argumento a través de mi urls.py? No se que hacer.

Respuestas a la pregunta(3)

Su respuesta a la pregunta