Django-mysite만들기4 로그인 로그아웃 기능 추가(django session)

|

django mini project

cafe24신입사원 교육과정 - django 수업 내용 정리

강사님github


전체 코드 보기


login 만들기

로그인 폼 만들기 : loginform.html코드

views

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코드 -> 세션 처리!

views

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

단, 열려있는 모든 브라우저 창을 닫고 다시 접근해야한다.