장고 내장 로그인 views에 로그인 유지 체크박스 추가하기

3-05 로그인과 로그아웃에서 django.contrib.auth에 있는 장고 내장 로그인views를 사용하여 손쉽게 로그인 기능을 구현할 수 있습니다.
하지만 내장 로그인views에는 로그인 유지 기능이 없고, 이는 settings.py에서만 설정이 가능합니다.
SESSION_EXPIRE_AT_BROWSER_CLOSE

사용자의 선택에 따라 로그인 유지 기능이 유동적으로 작동하길 원했지만,
내장 로그인views를 계속 사용하고 싶어서 구글링하다가 방법을 찾아서 공유해 봅니다.

SESSION_EXPIRE_AT_BROWSER_CLOSE = False 기준

  1. 장고 내장 로그인 form에 체크박스 필드를 추가하여 덮어쓰기
    -common/forms.py-

    from django.contrib.auth import forms as auth_forms
    class LoginForm(auth_forms.AuthenticationForm):
        remember_me = forms.BooleanField(required=False)
    
  2. 장고 내장 로그인 view에 기능 덮어쓰기
    -common/views.py-

    from .forms import LoginForm
    from django.contrib.auth import views as auth_views
    class UpdatedLoginView(auth_views.LoginView):
    form_class = LoginForm
    def form_valid(self, form):
        remember_me = form.cleaned_data['remember_me']
        if not remember_me:
            self.request.session.set_expiry(0)
            self.request.session.modified = True
        return super().form_valid(form)
    
  3. 로그인 urls.py 변경
    -common/urls.py-
    -점프 투 장고 기준 url-

    path('login/', auth_views.LoginView.as_view(template_name='common/login.html'), name='login'),

    -변경된 url-

    from . import views as common_views path('login/', common_views.UpdatedLoginView.as_view(template_name='common/login.html'), name='login'),

  4. login.html에 remember me 체크박스 추가

덕분에 장고 내장 views를 커스텀하는 방법을 알게 됐습니다.

참고
방법, super()

시수 543

M 2022년 4월 15일 11:40 오전

목록으로