https://everyday-joyful.tistory.com/85
위 포스팅과 이어지는 내용입니다.
1. 회원가입을 위한 인증코드 생성
🧐 인증코드 생성할 때 먼저 단계를 쪼개보자! 👉 로직 설계, 어느 함수에서 처리할 지 고민!
(1) 인증코드를 무작위로 생성 (join 함수에서 처리)
(2) 이메일로 인증코드 사용자에게 발송 (join 함수에서 처리)
(3) 생성된 코드와 사용자의 입력 코드가 일치하는지 확인 (verifyCode, verify에서 처리)
-> 일치하면 회원가입 성공!
-> 일치하지 않으면, 경고!
(1) 인증코드를 무작위로 생성
- main > views.py > join 함수에 인증코드 생성 관련 코드 기입
- from random import * : 숫자 랜덤 생성 라이브러리 다운(상단)
- code 라는 객체 랜덤하게 생성된 인증코드 지정
- print(code)를 통해 인증코드가 잘 생성되었는지 터미널에서 확인
- runserver 를 통해, 새로운 계정을 생성해보기
- 사용자 정보 입력 후, 다음 페이지가 나오는지 확인
- 터미널 확인
👉 여기까지 서버가 랜덤으로 인증코드를 발송 확인
👉 이제 발송된 코드를 저장해야함! (쿠키 또는 세션에 사용자 정보/인증 코드 등을 담아두고, 일정 시간 내에 verify를 진행 할 수 있도록 함)
(2) 인증코드를 response 객체에 저장
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("응답 객체 완성 ------------")
return response
- 인증코드를 response 라는 객체에 저장하고, set_cookie 를 통해 인증코드와 user id를 일시적으로 저장한다
- 잘 진행되었는지 확인
- 다시 한 번 회원가입을 진행하여, 여기까지 잘 되었는지 확인해보기
- "응답 객체 완성"이 터미널에 나오면 성공!
(3) 메일 수신자에게 보낼 템플릿 작성(email_format.html)
- templates/sendEmail 폴더를 생성하고 email_format.html 파일 만들기
[상세 코드]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>ExcelCalculate 회원 가입</h1>
<p>다음의 인증 코드를 입력해 주세요</p>
<h2>{{ verifyCode }}</h2>
</body>
</html>
2. 이메일로 인증코드 사용자에게 발송
(1) 이메일 세팅
- 이메일을 전송할 자신의 이메일 계정을 입력한다.(이메일 보내는 방법은 별도로 정리하지 않음)
(2) 이메일 보내기 위한 send 함수 작성
- sendEmail > views.py >> send 함수 작성 경로
- 이메일 보내기에 필요한 라이브러리 import 먼저 확인
- 인증코드를 발송하는 send 함수를 추가로 작성한다
- 중간에 print() 함수를 통해 과정이 완료되었는지 확인할 수 있도록 한다
- try, except 를 통해 에러를 관리
from django.shortcuts import render
from django.http import HttpResponse
from django.core.mail import send_mail, EmailMessage
from django.template.loader import render_to_string
(2) join 함수 수정하여, 이메일 보내기 마무리하기
- main > views.py >> join 함수 수정
- 앞서 작성한 send 함수를 import : from sendEmail.views import *
- send 함수 결과값을 send_result로 저장하고, if/else 구문으로 성공여부를 확인
[상세 코드]
from sendEmail.views 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) #서버가 보낸 코드, 쿠키와 세션
response = redirect("main_verifyCode") #응답을 객체로 저장함
response.set_cookie('code', code) #인증코드
response.set_cookie('user_id', user.id)
print("응답 객체 완성 ------------")
# 이메일 발송하는 함수 만들기
# 이메일 주소 2개 준비
send_result = send(email, code)
if send_result:
print("main > views.py > 이메일 발송 중 완료된 거 같음..!")
return response
else:
return HttpResponse("이메일 발송 실패!")
인증코드 오는지 테스트 해보기 ; $ python manage.py runserver
- 다시 회원가입 과정을 진행하여 아래와 같이 인증코드가 오는지 체크!
728x90
'Web Development' 카테고리의 다른 글
[Django] 엑셀 데이터 출력 페이지 만들기(4) - 로그인 기능 구현 (0) | 2023.08.02 |
---|---|
[Django] 엑셀 데이터 출력 페이지 만들어보기(4) (0) | 2023.08.01 |
[Django] 엑셀 데이터 출력 페이지 만들어보기(2) (0) | 2023.07.31 |
[Django] 엑셀 데이터 출력 페이지 만들어보기(1) (0) | 2023.07.31 |
Django로 To do list 만들기 (1) | 2023.07.27 |