본문 바로가기
Web Development

[Django] 엑셀 데이터 출력 페이지 만들어보기(3)

by ISLA! 2023. 8. 1.

https://everyday-joyful.tistory.com/85

 

[Django] 엑셀 데이터 출력 페이지 만들어보기(2)

[Django] 엑셀 데이터 출력 페이지 만들어보기(1)과 이어집니다 👀 user 정보 저장용 model 만들기 1. user 정보를 등록할 저장소 만들기 (1) main > models.py (2) 유저 모델 생성 후, migrate 처리 $ python manage.py

everyday-joyful.tistory.com

위 포스팅과 이어지는 내용입니다.


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