Nonamed Develog
[TIL][240709] 가위 바위 보 웹(Flask, DB) 본문
어떤 문제가 있었나?
협업을 하다보니 작성 코드의 논리가 어긋나버렸다. 코드 작동은 잘 되는데 코드 리뷰를 하자면 비활성화 되어있는 객체가 있거나 중복으로 작성된 코드도 있었다. 예를 들어 flask route가 1개였는데 2개가 되어서 한 동작으로 진행될 코드가 두 동작으로 나뉘어 있다거나, DB에 저장하는 코드가 2가지였다.
무엇을 시도했나?
조원 한 분이 의문을 제기했고 다같이 코드를 리뷰하면서 어디서부터 꼬인건지 찾기 시작했다. 아직 조원 모두 flask에 대한 이해도가 부족하여 조심스럽게 의견을 나눴고, "코드가 작동하는데 수정하지말고 유지하자", "그래도 수정해야할 건 하자"라는 의견들이 나왔다. 내 의견은 전자였는데 잘못 건드렸다가 코드가 망가질 수도 있다는 두려움이 있었기 때문이다. 결론적으로 내 의견은 틀린 의견이었다. 조원들은 멋지게 코드를 수정했고 프로젝트를 거의 완료했다.
어떻게 해결됐는가?
문제의 코드는 home 라우트와 play 라우트로 나뉘어져 home을 로딩할 때, 가위 바위 보 입력 받을 때 2가지로 분할이 되어있었다. home 라우트로 통합하여 코드를 다시 작성했다. 이 코드로 승패 결과, 승무패, 승패 결과 테이블을 모두 실행할 수 있었다.
@app.route('/', methods=['GET', 'POST'])
def home():
user_choice = ""
com_choice = ""
result = ""
if request.method == 'POST':
user_choice = request.form['user_choice']
result, com_choice = game(user_choice)
results = GameResult.query.all()
wins = GameResult.query.filter_by(result='승').count()
draws = GameResult.query.filter_by(result='무').count()
losses = GameResult.query.filter_by(result='패').count()
return render_template('index.html', results=results, wins=wins, draws=draws, losses=losses, user_choice=user_choice, com_choice=com_choice, result=result)
새로 알게 된 점은 무엇인가?
새로운 코드를 작성할 때 route method에 POST만 입력하고 실행시켰더니 오류가 났다. 버튼을 눌러 입력 받는 방식으로 POST가 맞다고 생각했는데 웹 페이지를 처음 로딩할 때는 GET을 이용한다고 한다. 따라서 GET, POST 둘다 작성하는 것이 맞았다.
승무패 카운트를 하기 위해서 기존에 썼던 count += 1의 방식으로 문제를 풀려고 했지만 힌트에서 filter_by(), count()를 이용하여 문제를 풀라고 했다.
results = GameResult.query.all()
# 모든 게임 결과를 데이터베이스에서 가져온다
# GameResult는 데이터베이스 테이블을 나타내는 SQLAlchemy 모델
# query.all()은 테이블의 모든 행을 반환
wins = GameResult.query.filter_by(result='승').count()
# filter_by(result='승').count(): 결과가 승인 행의 개수
draws = GameResult.query.filter_by(result='무').count()
losses = GameResult.query.filter_by(result='패').count()
무엇을 느꼈고 내일은 무엇을 할까?
오늘은 프로젝트 마무리 작업에 들어가서 시간을 많이 투자해서 개인 공부할 시간이 별로 없었지만, 얻은 것들이 많은 것 같다. 지난 프로젝트보다 웹개발에 대해서 조금 더 알아가는 시간이었다. 내일은 발표인데 발표자가 발표를 원활하게 할 수 있도록 도와줄 계획이다.
'WHAT I LEARN > TIL' 카테고리의 다른 글
[TIL][240711] while문 조건 (0) | 2024.07.11 |
---|---|
[TIL][240710] .gitignore, 인스턴스의 이해 (0) | 2024.07.10 |
[TIL][240705] hashlib, logging, sleep() (0) | 2024.07.05 |
[TIL][240704] class, Branch(PyCharm) (0) | 2024.07.04 |
[TIL][240702] 가위 바위 보 게임, 다중 반복문 (0) | 2024.07.02 |