AuthenticationFormクラス
- Djangoは、ログイン用のフォームを実装するためのフォームクラス(AuthenticationForm)をデフォルトで提供している
- forms.pyで、AuthenticationFormクラスを継承したフォームクラスを定義し、ビュークラスのform_classに指定することで簡単にログインフォームをブラウザに表示することができる
- AuthenticationFormクラスで定義されているusername, passwordフィールドに対してwidgetを適用している
- Formクラスの親クラス(BaseForm)のself.fields
※widget:form-controlクラスやプレースホルダーといったフォームの見た目を整えるためのもの
※1:全てのフォームの部品のclass属性に「form-control」を指定(bootstrapのフォームデザインを利用するため)
※2:全てのフォームの部品にpaceholderを定義して、入力フォームにフォーム名が表示されるように指定。
forms.py
from django.contrib.auth.forms import AuthenticationForm
class LoginForm(AuthenticationForm):
"""ログインフォーム"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self.fields.values():
field.widget.attrs['class'] = 'form-control'
field.widget.attrs['placeholder'] = field.label
- AuthenticationFormは、Django標準のFormクラスを継承している
- username, passwordフィールドを定義している
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)
def __init__(self, request=None, *args, **kwargs):
"""
If request is passed in, the form will validate that cookies are
enabled. Note that the request (a HttpRequest object) must have set a
cookie with the key TEST_COOKIE_NAME and value TEST_COOKIE_VALUE before
running this validation.
"""
self.request = request
self.user_cache = None
super(AuthenticationForm, self).__init__(*args, **kwargs)
~~省略~~