여름의 서재
[Django] Auth 정복하기(2)_Login & Logout 본문
728x90
📄 유저 시나리오
- 로그인
1. 로그인 버튼을 누른다.
2. 로그인 폼이 담긴 페이지가 나온다.
3. 로그인 폼을 작성하여 제출 버튼을 누른다.
4. 로그인이 정상적으로 완료되면 메인페이지가 나온다.
- 로그아웃
1. 로그아웃 버튼을 누른다.
2. 로그아웃이 되고 메인페이지가 나온다.
🔨 기능 구현하기
1) urls
: accounts 앱에 login, logout이라는 이름의 주소 생성
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('signup/', views.signup, name='signup'),
2) views
- Login
- GET: 로그인 폼이 담긴 페이지를 응답
- POST: 사용자 정보 받아서 유효성 검사 후 로그인
- 로그인 == 세션 생성 후 DB에 저장
- 유효성 검사 실패 시 에러 메세지 출력
(단, 로그인이 된 상태에서 login 함수를 실행하려한다면 바로 메인페이지로 이동)
from django.contrib.auth.forms import AuthenticationForm
def login(request):
if request.user.is_authenticated:
return redirect('articles:index')
if request.method == 'POST':
form = AuthenticationForm(request, request.POST)
if form.is_valid():
auth_login(request, form.get_user())
return redirect('articles:index')
else:
form = AuthenticationForm()
context = {
'form': form,
}
return render(request, 'accounts/login.html', context)
① AuthenticationForm
: 유저가 존재하는지를 검증하는 Django 내장 모델 폼
- Logout
- POST: 세션 제거
(단, 로그인이 되지 않은 상태에서 logout 함수를 실행하려한다면 바로 로그인 페이지로 이동)
def logout(request):
if not request.user.is_authenticated:
return redirect('accounts:login')
auth_logout(request) # 세션 제거 & requset.user 값 초기화
return redirect('/articles/')
① auth_logout (원래 logout)
: 현재 요청에 대한 db의 세션 데이터를 삭제하고 클라이언트 쿠키에서도 sessionid를 삭제하는 함수
3) templates
- login
: 로그인 폼이 담긴 페이지
{% extends 'base.html' %}
{% block content %}
<h1>Login</h1>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
{% endblock content %}
'Skill > Django' 카테고리의 다른 글
[Django] User model 커스텀하기 (0) | 2021.10.22 |
---|---|
[Django] Auth 정복하기(3)_Update & Delete (0) | 2021.09.26 |
[Django] Auth 정복하기(1)_Signup (회원가입) (0) | 2021.09.26 |
[Django] CRUD를 더 탄탄하게(4)_이미지 넣기 (Static & Media) (0) | 2021.09.26 |
[Django] CRUD를 더 탄탄하게(3)_알림 문구 넣기 (Messages) (0) | 2021.09.25 |
Comments