포스트

[Flask] 회원 기능 구현하기 <4 : 회원정보 구현하기>

0. 이전글

1: 로그인 구현하기

2: 회원가입 구현하기

3: 회원탈퇴 구현하기

1. 구현점

  • 로그인 되어있을 경우 session에 있는 회원 아이디 읽기
  • 읽어들인 id로 관계형 db에서 검색하기
  • db의 정보를 리턴하기

2. 코드

이하의 코드는 로그인이 되어있을 경우를 상정한다.

2.1 회원 정보 검색 함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def get_user_info(db, session):
    row = None
    try:
        if not db.open: #  
            db.ping(reconnect=True)
        
        id_in_session = session['username']
        sql = """
        SELECT * FROM users WHERE name = %s;  
        """
        cursor = db.cursor()
        cursor.execute(sql, (id_in_session))

        row = cursor.fetchone()
        print(row)
    
    except Exception as e:
        print("접속오류", e)
    
    finally:
        if db:
            db.close()
        print('종료')

    return row

세션에 아이디가 있다면 세션에서 username을 가져와 id_in_session 에 할당해준다.

검색한 아이디로 MySQL에서 검색해 쿼리를 실행해주고

cursor.fetchone() 로 읽어들인 정보를 출력해준다.

이때 이 과정에서 오류가 일어난다면 “접속 오류”를 로그로 찍어준다.

2.2 엔드포인트 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bp_userinfo= Blueprint("user_info", __name__, url_prefix = "/userinfo")

@bp_userinfo.route('/' , methods = ['GET'])
def userinfo():
    print(session)
    user_data = get_user_info(db,session)
    try:
        if user_data:

            return jsonify(user_data), 200
        else:
            return jsonify({"error": "오류가 발생했습니다."}), 500

    except Exception as e:
        print("error : ", e)
        return jsonify({"error": e}), 500

단순회 회원정보를 저장만 하기 때문에 “GET” 메서드를 사용해준다.

user_data 에 위 함수에서 읽어들인 row 값을 저장해주고

만약 user_data 가 존재한다면 해당 row을 json으로 바꿔 반환한다.

user_data가 존재하지 않는다면 error: 오류가 발생했습니다. 를 json으로 반환한다.

이 try - except 과정에서 오류가 난다면 에러 로그를 찍어준다.

3. 실행결과

먼저 로그인해 session에 회원 정보를 저장해준다.

GET 요청을 날려 회원 정보를 읽어보자

회원 아이디, 메일, 회원가입일, 랭크를 반환한다

로그도 정상적으로 띄워준다.

4. Next

다음엔 MySQL을 사용해 게시판 기능을 제작해보겠다.



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.