Django 로그인/로그아웃 시스템 첫 번째 섹션

어이, 친구들, 요즘 어때?오늘 섹션에서는 "기억해"쿠키 옵션을 사용하여 로그인 시스템을 만듭니다.
여기서 우리는 바퀴를 재발명할 필요가 없다.django가 내장한 신분 검증 시스템에 감사한다.우리는 신분 검증 시스템을 확장하고 맞춤형으로 제작함으로써 우리의 신분 검증 시스템을 구축하여 우리의 수요를 만족시킬 수 있다.
Django는 해당 모듈django.contrib.auth에서 이러한 인증 지원을 제공하며 설정에 포함되어 있습니다.우리가 프로젝트를 처음 만들었을 때이 내장된auth 프로그램은 로그인과 로그아웃 보기, 그리고 다른 암호 관리 보기를 제공합니다. 이 시리즈의 뒷부분에서 이 보기들을 소개할 것입니다.
  • 너무 좋아요.이제 이 모든 것을 어떻게 결합하는지 봅시다.
  • 로그인 폼부터 시작합시다.Django는 사용자 이름과 비밀번호를 바탕으로 사용자를 인증하는 기본 클래스입니다.
  • 로그인 이름을 만들고'나를 기억해'콤보 상자를 추가하며 작은 위젯으로 사용자 이름과 비밀번호 필드를 안내할 것입니다. 앞에서 보듯이 저희도 로그인 이름을 만들 것입니다.
  • 사용자가 사이트를 방문할 때마다 증빙서류를 작성하고 싶지 않기 때문에 제 옵션을 기억하는 것은 좋은 기능입니다.
  • 형식.py
    # Add this to previous list of imports
    from django.contrib.auth.forms import UserCreationForm, AuthenticationForm 
    
    
    class LoginForm(AuthenticationForm):
        username = forms.CharField(max_length=100,
                                   required=True,
                                   widget=forms.TextInput(attrs={'placeholder': 'Username',
                                                                 'class': 'form-control',
                                                                 }))
        password = forms.CharField(max_length=50,
                                   required=True,
                                   widget=forms.PasswordInput(attrs={'placeholder': 'Password',
                                                                     'class': 'form-control',
                                                                     'data-toggle': 'password',
                                                                     'id': 'password',
                                                                     'name': 'password',
                                                                     }))
        remember_me = forms.BooleanField(required=False)
    
        class Meta:
            model = User
            fields = ['username', 'password', 'remember_me']
    
  • 우리는 마지막 부분에서 등록표를 만들 때 어떻게 만드는지 보았기 때문에 여기서 상세하게 소개하지 않을 것이다.
  • 다음에 우리가 만든 로그인 폼을 사용하기 위해 보기를 설정합니다.Django에는 내장LoginView도 있습니다.우리는 클래스의 일부 속성과 방법을 다시 써서 우리의 수요를 만족시킬 수 있다.
    의견.py
    from django.contrib.auth.views import LoginView
    from .forms import RegisterForm, LoginForm
    
    # Class based view that extends from the built in login view to add a remember me functionality
    class CustomLoginView(LoginView):
        form_class = LoginForm
    
        def form_valid(self, form):
            remember_me = form.cleaned_data.get('remember_me')
    
            if not remember_me:
                # set session expiry to 0 seconds. So it will automatically close the session after the browser is closed.
                self.request.session.set_expiry(0)
    
                # Set session as modified to force data updates/cookie to be saved.
                self.request.session.modified = True
    
            # else browser session will be as long as the session cookie time "SESSION_COOKIE_AGE" defined in settings.py
            return super(CustomLoginView, self).form_valid(form)
    
  • 우리가 하는 첫 번째 일은 AuthenticationForm 속성을 사용자 정의form_class로 설정하는 것이다. 기본값LoginForm을 사용하지 않기 때문이다.
  • 다음에 우리는 AuthenticationForm 방법을 다시 썼다. 이 방법은 유효한 폼 데이터를 발표할 때 호출된다.이 방법에서, 우리는 '나를 기억해라' 콤보 상자를 선택했는지 검사한다. (여기에는 '검사' 가 매우 많은데, 나는 빙빙 돌려서 하는 명령이 있다.)
  • 을 선택하지 않으면 브라우저가 닫힐 때 세션이 자동으로 만료됩니다.그러나 My Storage 상자를 선택한 사용자는 설정에서 세션을 정의할 때마다 세션이 지속됩니다.피야.
  • 그러면 설정 중form_valid을 30일(또는 얼마나 오래 지속하기를 원하는지)으로 계속 설정합니다.
  • 설정py
    SESSION_COOKIE_AGE = 60 * 60 * 24 * 30
    
  • 너무 좋아요.현재 주요 프로젝트의 URL에 있습니다.필요한 로그인 경로를 적절한 CustomLoginView에 매핑합니다.
  • 우리가 할 때 로그아웃 경로를 만듭니다. 이것은 내장된 SESSION_COOKIE_AGE로 처리됩니다.
  • 사용자 관리/URLpy
    # Add the following to the list of previous imports
    from django.contrib.auth import views as auth_views
    from users.views import CustomLoginView  
    from users.forms import LoginForm
    
    urlpatterns = [
        # Add this path
        path('login/', CustomLoginView.as_view(redirect_authenticated_user=True, template_name='users/login.html',
                                               authentication_form=LoginForm), name='login'),
        path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    ]
    
  • LogoutView는 인증 후 로그인 페이지에 액세스하려는 사용자가 다시 돌아간다는 것을 의미합니다.
  • 템플릿은auth 프로그램이 제공하는 자원의 일부분이 아니기 때문에 로그인과 로그아웃 보기에 템플릿을 제공해야 합니다.기본적으로django는 등록 디렉터리에서 이 템플릿을 찾을 것입니다.그러나 이 기본 동작을 덮어쓰고,django가users/templates/users/directory에서 로그인과 취소 템플릿을 찾을 수 있음을 알려 줍니다.우리는 redirect_authenticated_user=True를 매개 변수로 template_name 함수에 전달함으로써 이 점을 실현할 수 있다.
  • as_view - 확장 로그인 폼을 사용하기 때문입니다.
  • 로그인에 성공하면 기본적으로django는 사용자를 설정 파일 페이지로 다시 지정합니다.우리도 우리의 설정에서 그것을 수정할 수 있다.py 파일, 열어 봅시다.
    설정py
    LOGIN_REDIRECT_URL = '/'
    LOGIN_URL = 'login'
    
  • authentication_form=LoginFormdjango가 성공적으로 로그인한 후에 사용자를 홈 페이지로 다시 지정한다고 알려줍니다.
  • LOGIN_REDIRECT_URL는 URL 또는 명명된 URL 모드로, 특정 페이지에 대한 액세스를 제한하려고 하면 로그인을 위해 요청이 리디렉션됩니다.기본값은/accounts/login/입니다.단, 로그인 경로를 LOGIN_URL로 설정했기 때문에 /logindjango가 이 경로를 어디서 찾을 수 있는지 알려 줍니다.
  • 이것은 로그인/로그아웃 시스템의 첫 번째 부분입니다.다음 부분에서 우리는 템플릿을 만들고 일부 내용을 수정할 것이다.기대해주세요!
    감사합니다github에서 완성된 프로그램을 찾을 수 있습니다.
    마음대로 질문하세요. 어떤 건의도 환영합니다.안녕히 계세요!

    좋은 웹페이지 즐겨찾기