A Developing Developer

DAY 16. 2ed 팀 프로젝트 2일차, W 튜터님 API 특특강 본문

내일배움캠프 4기/TIL

DAY 16. 2ed 팀 프로젝트 2일차, W 튜터님 API 특특강

H-JJOO 2022. 12. 6. 01:54

우선 현재시간 새벽 1시 31분

 

16일차 동안 제일 늦게까지 프로젝트를 진행했다.

 

오늘 목표인 로그인, 회원가입 기능 (대강) 완료가 생각보다 오래걸렸다.

 

완벽하지는 않아도 어느정도 구색은 갖춘거같아서 뿌듯하다.

 

오늘은 팀 프로젝트 2일차로 원래 스케줄은 풀로 팀 프로젝트를 진행하는 것인데, 저녁 먹고 W 튜터님께서 특별히 API 특강을 진행 해주셨다.

 

2시간 넘게 특강을 진행하셨는데, 열심히 강의해주신 만큼 흡수를 못해서 항상 아쉽다.

 

============================================================================================

- I-ONE 팀 프로젝트

 

- Flask 의 session 라이브러리

# main
@app.route('/')
def home():
    if "usernm" in session:
        return render_template('main.html', usernm = session.get("usernm"), login = True)
    else:
        return render_template('main.html', login = False)

usernm 변수에 로그인 할 때 혹은 회원가입 할 때  nm 컬럼의 값을 session에 저장해서 로그인 상태를 유지한다.

 

- 로그인

# login
@app.route('/users/login', methods = ['GET', 'POST'])
def login():
    db = pymysql.connect(host = 'localhost', user = 'root', db = 'i_one', password = 'M@ansghkwo12', charset = 'utf8')
    curs = db.cursor()

    if request.method == 'POST':
        uid = request.form['userId']
        upw = request.form['password']

        print(uid, upw)

        curs.execute("SELECT * FROM t_user")

        t_user_list = curs.fetchall()

        print(t_user_list)

        for t_user in t_user_list:
            print(t_user)
            if uid == t_user[1]:
                if upw == t_user[2]:
                    session["usernm"] = t_user[3]
                    return redirect("/")
                else:
                    return '<script>alert("비밀번호가 틀렸습니다."); document.location.href="login"; </script>'
        return '<script>alert("아이디가 틀렸습니다."); document.location.href="login"; </script>'


        db.commit()
        db.close()

    return render_template('login.html')

db를 연결하고 POST 방식일 경우 입력한 userId와 password 값을 회원가입에 Insert 했던 uid와 upw 값을 비교해서 모두 동일하면 session 에 nm 값을 입력하고 / (main.html) 페이지로 redirect, 비밀번호, 아이디 틀린 분기별로 <script> 를 활용하여 alert 및 login 페이지로 이동한다.

 

- 회원가입

# sign up, INSERT
@app.route('/users/signup', methods = ['POST'])
def insert_user():
    db = pymysql.connect(host = 'localhost', user = 'root', db = 'i_one', password = 'M@ansghkwo12', charset = 'utf8')
    curs = db.cursor()

    if request.method == 'POST':
        uid = request.form['userId']
        upw = request.form['password']
        nm = request.form['name']
        gender = request.form['gender']
        email = request.form["email"]
        loc = request.form['location']

        sql = """insert into t_user (uid, upw, nm, gender, email, location)
         values (%s,%s,%s,%s,%s,%s)
        """
        curs.execute(sql, (uid, upw, nm, gender, email, loc))

        session["usernm"] = nm

        db.commit()
        db.close()

        return redirect("/")

db 연결하고 POST 방식으로 input 각 값들을 SQL 문에 맞게 Insert 해준다.

이 때 회원가입시 로그인 된 효과를 주기위해서 session 에 nm 값을 대입해준다.

 

- 로그아웃

@app.route('/logout')
def logout():
    session.pop("usernm")
    return redirect("/")

로그인 유지 수단인 session 의 usernm 값을 pop 해준다.

 

- TODO 

비밀번호 암호화, 로깅 데이터 확인 기능(err.log 파일 만들어서 에러 관리)

 

- W 튜터님 API 특특강

 

(솔직히 이해가 쏙쏙 되지는 않았다, 강의를 듣던 80 여명중 대부분도 나랑 비슷했을거라 믿는다)

 

Front End(FE) 와 Back End(BE) 를 분리하는 이유! :

    (외부 API 데이터를 통해) 다양하게 활용하기 위해서

        + 모바일 시장이 커지면서 html을 해석할 수 없는 클라이언트 때문에 BE 와 FE 가 나눠지는데 가속화 영향

 

(현재 단계에서는) API 는 JSON 데이터를 주고 받는다.

 

API 명세시 단수가 아닌 복수를 사용하고 가능한 동사를 피해야한다.

 

(2시간 동안 반복해서 설명해주셨는데... 복습을 더 해야겠다.)

 

============================================================================================

 

TIL 다쓰니까 거의 2시네?

 

뿌듯한데 피곤하다ㅠㅠ

 

끝~