본문 바로가기
python

Django로 회원가입/로그인 페이지 만들기 (Python) - 4탄

by 포 키 2023. 8. 2.
728x90

파이썬 웹 개발로 장고를 사용하는 것을 배우면서 웹 개발 쪽으로 점차 관심이 가기 시작한다.

원래는 파이썬으로 웹 개발을 많이 하는 추세는 아니다보니 기대를 한 것도 아니었고, 빅데이터 분석쪽으로만 생각을 했는데 이번 내용을 수강하면서 html도 css도 제대로 알고싶어진다.

이 포스팅을 참고하려는 사람들도 파이썬으로 웹 개발하는 것에 관심이 커진다면, 장고만을 활용하기보단 최종적으로 자바스크립트 공부를 해서 능력을 업그레이드 시킬 목표를 잡는다면 좋겠다.

오늘의 포스팅은 이전에 인증코드를 통해 구현받은 내용에서 슈퍼유저부분을 재생성하는 것부터 시작한다.

2023.08.01 - [python] - Django로 회원가입/로그인 페이지 만들기 (Python) - 3탄

 

Django로 회원가입/로그인 페이지 만들기 (Python) - 3탄

이번에는 인증코드를 입력해 회원 인증이 되는 것을 직접 확인해볼 것이다. 이 전의 내용은 앞의 포스팅을 참고하자 현재는 쿠키를 사용중인데 세션을 사용하는 것도 아래에 적어두겠다. 2023.08.

forky-develop.tistory.com

 

1. 로그인 창 구현하기

현재까지는 인증코드가 일치하는지에 따라 회원가입이 완료되는지만 구현이 된 상태이다.

여기서 회원가입이 되면 우리가 할 일은 그 계정으로 로그인을 해봐야 한다.

로그인창을 지금부터 구현해 보자

 

1) 로그인과 연결된 html을 찾아 action을 삽입하자

 

 

2) views 파일에 login 생성하기

현재까지는 login에 대한 부분이 따로 없기에 만들어 주자

login을 성공할 경우에는 메인화면으로 돌아가게 해주고, 실패할 경우 로그인이 실패했다는 창으로 돌아가게 한다.

 

 

def login(request):
    # 로그인된 사용자만 이용할 수 있도록 구현
    # 이 때, 현재 사용자가 로그인된 사용자인지 판단하기 위해 세션사용 FROM (verify 함수에서 만든 세션)
    # 세션 처리 진행함
    # 각각 독립된 객체로 진행됨

    loginEmail = request.POST['loginEmail']
    # html의 name이 loginEmail이라서 사용함
    loginPW = request.POST['loginPW']
    user = User.objects.get(user_email=loginEmail)

    # 회원가입시 입력한 패스워드와 입력한 패스워드가 같은지 확인
    if user.user_password == loginPW:
        request.session['user_name'] = user.user_name # 사용자가 회원가입 시, 입력한 정보
        request.session['user_email'] = user.user_email # 사용자가 회원가입 시, 입력한 정보
        return redirect('main_index')
    
    else:
        # 로그인 실패, 정보가 다름
        return redirect("main_loinFail")

 

로그인이 된 상태에서 메인화면으로 돌아가려면 메인 화면 역시 코드를 바꿔줘야 한다.

 

def index(request):
    # 로그인된 사용자만 접근
    # 조건문 : 사용자의 정보가 세션에 존재하면 메인화면으로 출력,
    # 만약, 사용자의 정보가 세션에 없다면 로그인 화면으로 출력
    if 'user_name' in request.session.keys():
        return render(request, "main/index.html") # 사용자의 세션정보가 담긴 상태의 index.html
    else:
        return redirect('main_signin')

 

그리고 로그인을 하면 로그인 정보를 담은 채 메인화면으로 돌아가야한다.

이 부분에서 세션을 담고 메인화면으로 돌아갈 수 있도록 결과에 대한 함수와, 로그아웃을 할 때의 함수를 지정해주자

 

 

def result(request):
    if 'user_name' in request.session.keys():
        return render(request, 'main/result.html') # 사용자의 세션 정보가 담겨져 있는 상태에서의 index.html
    else:
        return redirect("main_signin")
    

def logout(request):
    # 로그아웃의 개념 : 세션 정보를 삭제하는 것
    # 파이썬에서 객체를 지울 때
    del request.session['user_name']
    del request.session['user_email']

    return redirect('main_signin')

 

우리는 여기서 로그아웃을 하면 메인 화면으로 돌아가기보단 다시 로그인을 할 것인지를 묻는 로그인 창으로 돌아가도록 할 것이다.

그래서 로그아웃 시 redirect 로그인 화면으로 지정했다.

 

2. urls 파일 수정하기

원래로 치면 urls 파일을 먼저 수정하는게 맞으나, 로그아웃과 결과창까지 모두 구현하기 위해 뒤로 잠시 미뤘다.

 

 

3. 실행하기

runserver를 해보는데 여기서 체크해야할 부분이 있다.

1. 로그인 시, 메인화면으로 돌아가는지

2. 로그아웃이 잘되는지

3. 로그아웃 후 signin으로 잘 돌아가는지

4. 로그인 했을 때와 로그아웃 했을 때, result로 들어가면 각각 창이 잘 연동되는지.

 

이 부분들이 모두 잘 된다면 성공이다! 👏👏👏

그리고 가장 중요한 것!

우리가 아직 구현하지 않은 부분이 있다.

로그인 화면에서 패스워드를 다르게 입력할 경우 돌아가는 창을 아직 생성하지 않았다.

이 부분에 대해서는 오류가 난다면 정상인 것이니 당황하지 말자!

다음 포스팅에서 로그인 시 패스워드 오류에 대한 부분을 다루도록 하겠다.

728x90