DAY 16. 2ed 팀 프로젝트 2일차, W 튜터님 API 특특강
우선 현재시간 새벽 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시네?
뿌듯한데 피곤하다ㅠㅠ
끝~