Django-mysite만들기4 로그인 로그아웃 기능 추가(django session)
21 Jun 2019 | django python ormdjango mini project
cafe24신입사원 교육과정 - django 수업 내용 정리
login 만들기
로그인 폼 만들기 : loginform.html코드
urls.py 매핑 코드 추가
urlpatterns = [
...
# 로그인 폼을 보여주기
path('user/loginform', user_views.loginform),
# 로그인 로직(DB에 데이터 추가)
path('user/login', user_views.login),
...
]
views.py 로그인 세션 로직 처리
# login
def loginform(request):
return render(request, 'user/loginform.html')
def login(request):
# ORM문법을 통해, email과 password가 일치하는 결과 객체를 가져온다.
results = User.objects.filter(email=request.POST['email']).filter(password=request.POST['password'])
# 해당하는 데이터가 없으면 -> 로그인 실패
if len(results)==0:
return HttpResponseRedirect('/user/loginform?result=fail')
# 해당하는 데이터가 있다면 -> 세션 등록
authUser = results[0]
request.session['authUser'] = model_to_dict(authUser)
return HttpResponseRedirect('/')
base.html코드 -> 세션 처리!
seesion이 존재하지 않는 경우 -> 로그인, 회원가입
seesion이 존재하는 경우 -> 회원정보 수정, 로그아웃 보여주기
logout 처리
urls.py 매핑 경로 추가
urlpatterns = [
...
path('user/logout', user_views.logout),
...
]
views.py 로그아웃 세션 로직 처리
def logout(request):
# authUser로 존재하는 세션 지우기
del request.session['authUser']
return HttpResponseRedirect('/')
이렇게 하면, 로그아웃 눌러야지 로그아웃이 되고,
로그인 상태로 서버를 껐다 키면 세션 남아있다.
< 해결방법 >
settings.py에 다음 코드를 추가하면 된다.
# 브라우저 닫으면 session 없애기
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
# update되면 session바로 반영
SESSION_SAVE_EVERY_REQUEST = True
단, 열려있는 모든 브라우저 창을 닫고 다시 접근해야한다.