TIL Day 12.

Jen Devver·2024년 2월 28일

내배캠 TIL

목록 보기
12/91

개인과제 4번 어제 겪었던 문제에서 계속

데이터베이스 생성을 시작하면서 되던 것조차 웹페이지에서 출력이 안 되는 문제가 발생했다.

그래서 결국 튜터님을 찾아감..

웹페이지 자체가 출력이 안 되었고, 작성해두지 않았지만 SQL 에서 insert into 가 되지 않는 에러가 발생했다고 떴다.
터미널에서는 아래와 같이 출력됨.

TypeError: The view function for 'reset_database' did not return a valid response. The function either returned None or ended without a return statement.

웹페이지에 작성된 에러가 좀 더 구체적이었는데, 원인은 파라미터가 제대로 지정되지 않았던 점이었다.
특히 웹페이지 상단에 에러메시지로 (None, 바위, 졌습니다) 이런 식으로 떴는데, 원인은 버튼을 누르면 choice 의 값이 입력이 되는 상황에서 맨처음에는 choice가 입력되지 않은 상태이므로 값은 None이어서 출력에 에러가 있었던 것이었다.

따라서 처음 시작할 때 user 의 값은 None인 것을 처리를 해주어야 하는 것이었다. if 문으로 user 가 not None일 경우에 게임 판정을 하고 데이터베이스에 저장까지 하는 것으로 설정하고 else의 경우 컴퓨터와 결과값을 공백으로 출력하고 사용자의 경우 가위, 바위, 보 중 하나를 선택해 달라는 문장을 출력하여 해결했다.

    if user is not None:
        computer = random.choice(list)
        if computer == user:
            result = "무승부입니다!"
        elif (user == "가위✌️" and computer == "바위✊") or (user == "바위✊" and computer == "보✋") or (user == "보✋" and computer == "가위✌️"):
            result = "졌습니다"
        else:
            result = "이겼습니다!"

        # 데이터 db에 저장
        history = GameHistory(
            user_choice=user, computer_choice=computer, result=result)
        db.session.add(history)
        db.session.commit()

        context = {
            '컴퓨터': computer,
            '사용자': user,
            '결과': result
        }

    else:
        context = {
            '컴퓨터': "",
            '사용자': "가위, 바위, 보 중 하나를 선택하세요",
            '결과': ""
        }

+튜터님이 슬랙에 올려주심!!

Q2)⭐️⭐️⭐️⭐️sqlalchemy.exc.IntegrityError: NOT NULL constraint failed 에러가 떴어요!

A2)
(NOT NULL) 이라는 제약(constraint) 이 실패했다는 에러메세지이네요.
데이터베이스를 사용하시면 앞으로도 자주 마주하시게 될 에러입니다.

에러 자체는 "NULL 이면 안 되는 SQL Column 에 NULL 값이 들어왔다" 라는 뜻입니다.

python 에서 None 값을 SQL 에 넣을 때 NULL 로 들어가기 때문에,
SQL 에 데이터를 추가할 때 None 값을 넣고있지 않나 확인해보시면 될 것 같습니다~!

그 다음 문제는 데이터베이스에는 데이터들이 쌓이는데 화면으로 출력이 안 되는 것이었다. 이 경우 지난 웹개발 강의에서 했던 코드를 봐가면서 해결했다.

데이터들이 화면으로 출력이 안 되는 것은 데이터베이스의 값들을 불러오지 않았기 때문이었다.
따라서

GameHistory.query.all()

을 통해서 게임 데이터들을 모두 불러오고, filter_by().count() 로 각 승,패,무승부의 횟수를 세어 출력했다.

git 에 업로드

git에 add, commit, push 하는 것이 헷갈려 오늘 특강+지난 특강 복습+유튜브 영상 모두를 통해 하나하나 다시 해봤다.

우선

git remote add 레포명 'url'
git branch -M 브랜치명
git branch -u 레포명 브랜치명

을 해두어야 내 로컬 저장소와 깃 저장소를 연결할 수 있다.

git add .
git commit -m '커밋 메시지'

git status

에서 add와 commit 명령어를 확실히 외울 수 있었고
status 를 수시로 구동해서 확인해보는 작업도 해야겠다고 생각했다.

계속 push 했는데 실패해서 검색해보니 repo 만들 때 파일을 같이 만들면 생길 수 있는 오류라고 한다. 이럴 때 해결 방법은

git push -u 레포명 +브랜치명

으로 +를 붙여 강제 push 를 해주면 해결가능하다. 다만 이건 나 혼자 쓰는 레포고 처음 push하는 거라 가능한 듯..?

또한 .DS_Store라는 파일이 떠서 이게 뭔가 했더니 맥OS에서 파인더와 관련해 생기는 파일로, 개인 정보가 담길 수도 있다고 한다. 그래서 삭제했는데, 다음부터 깃에 올릴 때 유의해야겠다.

Today I Thought

모를 때는 튜터님께 찾아가면 도움이 많이 된다...!! 특히 단순한 지식 말고 나의 특수한 상황이라든지 힌트가 필요하다든지 할 때 튜터님께 여쭤보면 좋을 것 같다는 생각을 했다. 검색하면 나올 것 같아서 안 찾아간 적도 많았는데 혼자서 한 시간 넘게 고민하게 되면 튜터님을 찾아가야겠다.

그리고 깃이 쉬운 것 같으면서도 쉽지 않았다. 특강을 볼 때는 그냥 하면 될 것 같았는데... 과제 1번 파일이 하도 업로드가 안 되어서 그냥 파일을 끌어다가 올려놓았는데, 특강 다시 보고 유튜브 찾아보고 하면서 과제 2,3번 파일은 터미널로 업로드했다! 깃을 생활화하면 내가 수정한 내역을 볼 수 있어서 좋을 것 같다. 내일 4번 파일 업로드하면서 다시 복습해야겠다. 4번 문제 html 만지다가 환기할 겸 깃을 만져본 건데 더 머리 아파진 듯....

내일은 4번 문제 html, css 수정해서 사이트 레이아웃을 좀 더 근사하게 만들고 싶고, 오늘 구현하려다가 실패한 데이터베이스 초기화도 시간이 된다면 해 볼 것이다.

profile
발전 중...

0개의 댓글