Django
django | User 모델을 이용한 login, logout
leta
2021. 7. 13. 18:14
python manage.py startapp account #account 앱 생성
=> account/urls.py 정의, settings.py, modelproject/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/> 앞에 추가)