오늘 포스팅하는 내용은 어제 내용에 이어서 인증코드를 발급 받는내용부터 시작한다.
이전 내용을 알고싶다면 이전 블로그 포스팅을 참고해주자
2023.07.31 - [python] - Django로 회원가입/로그인 페이지 만들기 (Python) - 1탄
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 진자 템플릿이 뭐길래??
1) settings 에 이메일 세팅하기
이 과정이 필요한 이유는 이메일로 인증코드를 발송할 이메일 설정이 필요하기 때문이다.
그렇기 때문에 지난 블로그 포스팅을 참고해서 지메일로 설정을 해주자
2023.07.27 - [python] - vs code로 python Django gmail 연동하기 (특별편)
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 페이지를 들어가서 회원가입할 실제 이메일을 넣고 가입을 하면 아래와 같이 나온다.
이메일 발송까지 성공적으로 잘 됐다!
'데이터' 카테고리의 다른 글
Django로 회원가입/로그인 페이지 만들기 (Python) - 4탄 (0) | 2023.08.02 |
---|---|
Django로 회원가입/로그인 페이지 만들기 (Python) - 3탄 (0) | 2023.08.01 |
가상환경 jupyter lab을 이용해 selenium 세팅하기 (Python) (0) | 2023.08.01 |
Django로 회원가입/로그인 페이지 만들기 (Python) - 1탄 (0) | 2023.07.31 |
streamlit 꾸미기를 해보자 - 위젯 활용편 (0) | 2023.07.28 |