AI 웹 개발 과정/개인 프로젝트

개인 프로젝트 03 : 타임어택 미션 - 회원가입/로그인 페이지 만들기

만 기 2022. 5. 8. 21:51
[회원가입/로그인하여 게시판 API 연동하기] 타임어택 해설

 

기능1. 회원가입

- signup.html 파일 기본적인 body 구성

<body>
    <div class="login_page">
        ID: <input id="input_id" type="text">
        <br>PW: <input id="input_pw" type="password">
        <br><button onclick="sign_up()" class="signup">회원가입</button>
        <br><button onclick="sign_in()" class="signin">로그인</button>
    </div>
</body>

입력받을 아이디와 패스워드는 <input> 을 사용하여 입력 받고 <script>사용을 위해 id='' 값 지정해준다. 중요한건 type을 아이디는 'text'로, 패스워드는 'password' 타입으로 한다. <button>은 클릭시 함수 실행을 위해 onclick='' 사용한다.

 

 

- <script> signup 함수 호출

function signup() {
    let username = $("#input_id").val()
    let password = $("#input_pw").val()

    $.ajax({
        type: "POST",
        url: "/signup",
        data: {
            'username_give': username,
            'password_give': password
        },
        success: function (response) {
            alert(response['msg'])
            window.location.href ='/';
            // window.location.reload();
        },
        fail: function (response) {
            console.log('fail')
        }
    });
}

입력받은 아이디와 패스워드 $('#..').val() 로 값 읽어서 let으로 변수에 담는다. 

ajax요청은 post타입, /signup url 쓰고 서버에게 줄 데이터(아이디,비번) 딕셔너리로 묶는다. (서버에서 아이디는 username_give , 비번은 password_give 라는 이름으로 받음) success 하면 경고창에 response 받은 값을 띄우고 window.location.href 값이 '/' 이므로 현재페이지를 다시 로딩한다.

 

 

- app.py 회원가입 @app.route 실행

@app.route('/')
def home():
    return render_template('signup.html')

url:/ , 시작페이지로 signup.html 페이지 반환.

@app.route('/signup', methods=['POST'])
def signup():
    # 회원가입
    username_receive = request.form['username_give']
    password_receive = request.form['password_give']
    password_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()
    # DB에 저장
    doc = {
        "username": username_receive,  # 아이디
        "password": password_hash,  # 비밀번호
    }
    db.timeattack0506.insert_one(doc)

    return jsonify({'msg': 'signup succeed'})

ajax 요청 코드에서와 같이 url:/signup, methods=post 로 맞추고 request.form[클라이언트에서 준 이름]을 _receive로 저장한다. 저장한 비밀번호는 hashlib.sha256 함수로 암호화 하여 다시 저장한다. 한 유저의 정보들을 딕셔너리로 묶어서 DB에 저장한다( db.카테고리이름.insert_one(딕셔너리이름) ) 마지막으로 클라이언트에 jsonify 형식으로 msg 값 반환한다.

 

 

기능2.