본문 바로가기
python

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

by 포 키 2023. 8. 1.
728x90

오늘 포스팅하는 내용은 어제 내용에 이어서 인증코드를 발급 받는내용부터 시작한다.

이전 내용을 알고싶다면 이전 블로그 포스팅을 참고해주자

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

 

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

오늘 수강한 내용은 장고를 활용한 회원가입과 로그인 페이지를 만드는 것이다! 오전에는 파이쉘 커맨드를 사용해서 vagrant 가상환경을 연결하는 것을 했지만, 어떤 이유에서인지 오류가 아주

forky-develop.tistory.com

 

1. views.py 로 인증코드 발급 세팅하기

어제 사용한 파일에서 인증코드 발급을 받기 위한 부분은 join 이다. 

이곳에서 이름과 이메일 주소, 비밀번호를 작성해서 회원가입을 누르면 확인을 위한 인증코드를 발급해 인증한 계정만 가입이 가능하도록 할 것이다.

이 과정을 위해 가입내용을 작성하면서 인증코드를 함께 발송해야 한다.

 

 

위에 하나의 import를 더 해줘야 한다. 주의하기!!

from random import *

def join(request):
    print("테스트", request)

    name = request.POST['signupName']
    email = request.POST['signupEmail']
    pw = request.POST['signupPW']
    user = User(user_name = name, user_email = email, user_password = pw)
    user.save()

    print("사용자 정보 저장 완료됨!!")

    # 인증코드 하나 생성
    code = randint(1000, 9000)
    print("인증코드 생성--------------------", code)

    return redirect("main_verifyCode")

 

실행해서 보면, print 구문으로 인증코드가 발급된 것을 확인할 수 있다.

 

2. 응답 객체 만들기

응답을 객체로 만들어서 인증을 진행할 수 있도록 만들어야 한다.

나의 경우 오탈자로 인해 오류가 났었는데 urls.py에서 지정한 이름에서 오탈자를 넣어 페이지가 연동되지 않는 일이 발생했다.

 

 

def join(request):
    print("테스트", request)

    name = request.POST['signupName']
    email = request.POST['signupEmail']
    pw = request.POST['signupPW']
    user = User(user_name = name, user_email = email, user_password = pw)
    user.save()

    print("사용자 정보 저장 완료됨!!")

    # 인증코드 하나 생성
    code = randint(1000, 9000)
    print("인증코드 생성--------------------", code) # 서버가 보낸 코드, 쿠키와 세션

    response = redirect("main_verifyCode") # 응답을 객체로 저장한다
    response.set_cookie('code', code) # 인증코드
    response.set_cookie('user_id', user.id)

    print("응답 객체 완성--------------------", response)

    return response

 

여기서 print 구문을 작성했기 때문에 내가 낸 오탈자의 범위를 잡아낼 수 있었다.

개발을 하는 사람들이라면 내가 어느 구간까지 확인이 가능한지 print 구문을 잘 활용하는 것이 좋다는 것을 체감했다.

 

3. 이메일로 인증코드 보내기

인증코드를 만드는 것은 했지만, 인증코드를 회원가입을 원하는 사용자에게 발송하는 부분을 요청하지 않았다.

views 파일을 통해 이메일로 인증코드를 보낼 수 있도록 설정해주자

(참고로 나는 여기서 에러가 났었다. 코드를 참고하는 중에 오탈자를 그대로 쳐서 난 오류였는데 데이터 베이스를 삭제하는 바람에 슈퍼유저를 다시 설치하지 않아서 조금 헤맸다. 그치만 데이터 베이스를 삭제한 덕분에 깔끔해졌다! ㅋㅋㅋㅋ)

오류가 났던 이유가  Jinja 때문이었는데, 이 개념을 알아간다면 좀 더 깊이 공부할 수 있을 것이다!

2023.08.01 - [웹개발] - jinja2 template 진자 템플릿이 뭐길래??

 

jinja2 template 진자 템플릿이 뭐길래??

앞의 수업내용을 따라가면서 교재에는 사용하지 않는 것으로 나왔는데 실제로는 사용하지 않으면 오류가 났던 부분이 바로 Jinja 템플릿 이었다. 그래서 도대체 이 진자 템플릿이 뭐길래 오류가

forky-develop.tistory.com

 

 

1)  settings 에 이메일 세팅하기

이 과정이 필요한 이유는 이메일로 인증코드를 발송할 이메일 설정이 필요하기 때문이다.

그렇기 때문에 지난 블로그 포스팅을 참고해서 지메일로 설정을 해주자

2023.07.27 - [python] - vs code로 python Django gmail 연동하기 (특별편)

 

vs code로 python Django gmail 연동하기 (특별편)

드디어 대망의 마지막 이메일 연동을 배워 작성한다! 이 내용은 앞의 내용들과는 무관하므로 이메일 연동만 보고 싶은 사람들은 부담없이 이 포스팅 만을 참고하면 되겠다. 1. 폴더 생성하기 바

forky-develop.tistory.com

 

 

 

2) 이메일을 보내기 위한 html 생성하기

html 파일로 브라우저에서 열릴 창을 구성해준다.

여기서 교재의 오타를 확인할 수 있었다!

<h2>에서 jinja 템플릿이 적용되지 않아 오류가 났다..

 

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>ExcelCalculate 회원 가입</h1>
        <p>다음의 인증 코드를 입력해 주세요</p>

        <h2> {{ verifyCode }} </h2>
    </body>
</html>

 

3) 이메일을 발송하기 위한 코드 생성하기

응답에 대한 객체를 지정한 뒷부분에 이메일을 발송하는데 사용할 함수를 만들어주자

 

 

    # 이메일 발송하는 함수 만들어보기
    # 이메일 주소 2개 준비하기
    send_result = send(email, code)
    if send_result:
        print("Main > views.py > 이메일 발송 중...")
        return response
    else:
        return HttpResponse("이메일 발송 실패")

 

4) views 파일 수정하기

위의 모든 설정이 끝났다면 로직을 형성해야한다.

실제로 이메일을 보내기 위한 함수를 구현해 이메일이 발송되는지 확인해보자!

 

 

# Create your views here.
def send(receiverEmail, verifyCode):
    # main > join 함수 내부에서 사용됨
    # receiverEmail : 사용자가 회원가입할 때 입력한 이메일주소
    # verifyCode : 인증코드
    # 인증코드 발송은 에러가 날 가능성이 존재
    # try-except 구문 사용 : Google 이용 >> 개발자가 통제 불가능
    print(receiverEmail, verifyCode)
    try:
        content = {'verifyCode' : verifyCode}
        msg_html = render_to_string("sendEmail/email_format.html", content)
        msg = EmailMessage(subject="[멀티캠퍼스] 인증 코드 발송 메일",
                           body=msg_html,
                           from_email="infoker12@naver.com",
                           bcc=[receiverEmail])
        msg.content_subtype="html"
        msg.send()

        print("sendEmail > views.py > send 함수 임무 완료--------------------")
        return True
    except:
        print("sendEmail > views.py > send 함수 임무 실패--------------------")
        return False

 

 

4. 이메일 발송 확인하기

runserver를 통해 signup 페이지를 들어가서 회원가입할 실제 이메일을 넣고 가입을 하면 아래와 같이 나온다.

 

 

이메일 발송까지 성공적으로 잘 됐다!

 

728x90