230210 TIL #5 로그인페이지/반복문

김춘복·2023년 2월 10일
0

TIL : Today I Learned

목록 보기
5/571

230210 Today I Learned

오늘은 입학시험을 간단하게 통과하고 개인적으로 local에서 로그인 페이지를 구현해보라는 과제를 수행했다. 로그인 단계에서 반복문을 구성하는 과정에서 시간이 꽤 많이 걸렸다. 엄청 간단한건데 오래걸려서 자괴감이 좀 들었지만 그래도 스스로 생각해서 해내 뿌듯했다. 해결과정을 til로 쓰겠다.


flask 파이썬 서브 페이지 링크달기

  • 문제점 : 로그인 페이지와 회원가입 페이지로 구성했는데 홈이 로그인 페이지고 회원가입 버튼에 건 회원가입 페이지 링크가 안되는 간단한 문제가 있었다.

  • 시도 : 처음엔 회원가입 버튼에 onclick으로 accounts.html에 링크를 달았으나 실패.
    검색해보니 html에서 ./를 쓰면 현재경로라고 인식 된다고 해서 ./accounts.html로 시도해봤으나 또 실패.

  • 해결책 : 애초에 클라이언트 파일이 아니라 파이썬 서버 app.py파일에서 해결했어야 하는 문제였다.

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

으로 루트를 /accounts로 만들고 html로 가서 버튼 onclick에 /accounts로 링크를 걸어주니 해결되었다.

  • 알게된점 : flask를 사용 시 위의 과정으로 자기 사이트의 하이퍼링크를 달 수 있다.

flask 파이썬 로그인 페이지 구현

  • 회원가입 기능은 간단하게 post 요청으로 db에 입력값을 저장하는 방식으로 해결했다.

문제점

  • 6계정을 회원가입해두고 로그인 테스트를 해본 결과 첫번째 계정만 로그인이되고 나머지는 로그인이 되지 않았다.
def login_IDPW():
   loginid_receive = request.form['loginid_give']
   loginpw_receive = request.form['loginpw_give']

   all_accounts = list(db.accounts.find({}, {'_id': False}))

   for user in all_accounts:
      if (str(loginid_receive) == str(user['id']) and int(loginpw_receive) == int(user['pw'])):
         return jsonify({'msg': '로그인 완료!'})
      else:
        return jsonify({'msg': '로그인에 실패하였습니다.'})

이렇게 작성했던 코드를 복사해 테스트해보니 로그인 실패가 계속 반복되면서 뜨기때문에 실패했었다.

시도

  • 파이썬 반복문은 익숙치 않아 검색을 통해 파이썬 반복문 제어
    pass break continue를 배워서 써먹어 봤으니 실패했다.

  • while 반복문으로 i를 세워 시도해 봤으나 익숙치 않아 실패했다.

  • 저 반복문 사이에 i=0 을 세워놓고 횟수를 부여해 반복문이 유한하게 돌아가면 될 것 같아 시도해 보았다.

해결책

def login_IDPW():
   loginid_receive = request.form['loginid_give']
   loginpw_receive = request.form['loginpw_give']

   all_accounts = list(db.accounts.find({}, {'_id': False}))

   i = 0
   for user in all_accounts:
      if (str(loginid_receive) == str(user['id']) and int(loginpw_receive) == int(user['pw'])):
         return jsonify({'msg': '로그인 완료!'})
      else:
         i += 1
         if i == len(all_accounts):
            return jsonify({'msg': '로그인에 실패하였습니다.'})
  • 반복문 위에 i = 0으로 세워두고 로그인에 성공하지 못하면 i를 1씩 늘린다음
    총 계정의 갯수 만큼 반복문이 돌아가서 모든 계정을 비교 한 뒤에도 로그인에 실패했다면
    로그인 실패 문구를 띄우는 것으로 해결했다.

알게된 것

  • 진짜 쉽고 별거 아니었는데 고민을 이상한쪽으로 해서 시간만 잡아먹었다.

  • 반복문을 유한하게 돌아가게 변수 설정을 잘 해두는 방법을 더 익혀야겠다.

profile
Backend Dev / Data Engineer

0개의 댓글