Leta Learns

django | User 모델을 이용한 login, logout 본문

Django

django | User 모델을 이용한 login, logout

leta 2021. 7. 13. 18:14

python manage.py startapp account  #account 앱 생성

  => account/urls.py 정의, settings.pymodelproject/urls.py 수정

 

 

account 폴더 내에 templates 폴더 생성

=> signup.html, login.html 생성

(signup, login 페이지 모두 ModelForm 사용)

=> account/views.py, account/urls.py에 새 html파일들 연결

 

 

account/views.py (login 구현)

from django.shortcuts import render, redirect
from django.contrib.auth.forms import AuthenticationForm
from django.contrib import auth

# Create your views here.
def login_view(request):
  if request.method == 'POST':
    form = AuthenticationForm(request=request, data=request.POST)
    if form.is_valid():
      username = form.cleaned_data.get('username')
      password = form.cleaned_data.get('password')
      user = auth.authenticate(
        request=request,
        username=username,
        password=password
      )

      if user is not None:
        auth.login(request, user)
        return redirect('home')

    return redirect('account:login')
  
  else:
    form = AuthenticationForm()
    return render(request, 'login.html', {'form' : form})
  • 이번에도 ModelForm 사용. 이번에는 AuthenticationForm을 import해서 사용 (직접 작성 x)
  • AuthenticationForm에서 받아온 username, password에 대해 유효성 검사 => username, password 변수에 저장

        form.cleaned_data

        : is_valid()를 통해 유효성 검사를 한 이후 필요에 따라서 유효한 데이터들은 form.cleaned_data라는 딕셔너리 값으로 넘어온다.

  • 해당 username과 password에 일치하는 User모델이 있는지 확인 (음.. 이 부분 잘 모르겠다)
  • user가 존재하는 경우 (if user is not None:), 로그인 한 후 home 화면으로 redirect
  • form.is_valid()에서 False가 리턴되거나 user가 존재하지 않는 경우 계속 login화면에 머무름.
  • if request.method != 'POST': (form 데이터가 제출되지 않는 상황). => AuthenticationForm을 form 변수에 담아서 login.html에 띄워준다.

으음.. 어제는 괜찮았는데 다시 보니 이해 안 가는 부분이 좀 있다. 복습 필요.

 

 

 

account/views.py (logout 구현)

def logout(request):
	auth.logout(request)
	return redirect('home')

로그아웃 한 후 home 화면으로 돌아가기

 

views에 함수를 추가했으니 url에서도 해당 경로 추가해야함.

 

 

NavBar 수정 (in base.html)

modelproject/templates/base.html

=> li 태그들 끝에 코드 추가 (<ul/> 앞에 추가)

 

 

 

'Django' 카테고리의 다른 글

쿼리 스트링 Query String  (0) 2021.07.18
django | User 모델을 이용한 Signup, User 확장  (0) 2021.07.16
django | Forms  (0) 2021.07.08
django | Media 파일  (0) 2021.07.08
django | Static 파일  (0) 2021.07.07
Comments