군침이 싹 도는 코딩

API JWT 토큰 로그인 유무에 따라 다르게 처리하는법 본문

Python/Flask

API JWT 토큰 로그인 유무에 따라 다르게 처리하는법

mugoori 2023. 1. 10. 12:38
@jwt_required(optional=True)

# jwt_required 파라미터에 옵셔널 트루라고 적으면 포스트맨에서 실행할때 

헤더부분의 토큰을 체크하거나 안하거나 API를 사용할 수 있다

 

 

 

class MovieListResource(Resource) :

    @jwt_required(optional=True)
    def get(self) :  # 영화 리스트 가져오기

        user_id = get_jwt_identity()

        offset = request.args.get('offset')
        limit = request.args.get('limit')
        order = request.args.get('order')


        try :
            connection = get_connection()

            if user_id is None :
            
                query = '''select m.id, m.title , ifnull( count(r.movie_id) ,0 ) as cnt, ifnull( avg(r.rating) , 0) as avg
                        from movie m
                        left join rating r
                        on m.id = r.movie_id
                        group by m.id
                        order by '''+ order + ''' desc
                        limit ''' + offset + ''', '''+ limit +''';'''

                cursor = connection.cursor(dictionary=True)
                cursor.execute(query)   

            else :
                
                query = '''select m.id, m.title, ifnull( count( r.movie_id ), 0) as cnt, 
                        ifnull( avg( r.rating ), 0) as avg,
                        if( f.user_id is null, 0 , 1) as is_favorite
                        from movie m
                        left join rating r
                        on m.id = r.movie_id
                        left join favorite f
                        on f.movie_id = m.id and f.user_id = %s
                        group by m.id 
                        order by '''+ order +''' desc
                        limit '''+ offset +''', '''+ limit +''';'''

                record = (user_id, )
                cursor = connection.cursor(dictionary=True)
                cursor.execute(query,record)

            result_list = cursor.fetchall()

            i = 0
            for row in result_list :
                result_list[i]['avg']=float( row['avg'] ) # 데시멀 처리
                i = i + 1

            cursor.close()
            connection.close()

        except Error as e:
            print(e)
            cursor.close()
            connection.close()
            return {'error' : str(e)}, 500 

        return {'result' : 'success',
                'items' : result_list,
                'count' : len(result_list) }, 200

# 영화 리스트를 가져오는 API를 설계한것이다 

이 API에서 조건문을 달아서 로그인시 is favorite 라는 항목이 따로 나오게 설정하였다

방법은 if 문을 사용해 받아온 토큰이 None 일때와 아닐때의 쿼리문을 따로 써주고

커서로 쿼리문을 실행하게 해주면 된다

 

 

 

 

 

# 로그인 시 화면이다 is_favorite 가 들어가 있는것을 볼 수 있다

 

 

 

 

 

# 토큰 체크를 해제해 비로그인으로 만들었을 경우 is_favorite가 사라진것을 볼 수 있다

'Python > Flask' 카테고리의 다른 글

리얼 타임 추천 시스템 API  (0) 2023.01.10
추천 시스템 API  (0) 2023.01.10
페이징 처리 하는 법  (0) 2023.01.06
로그아웃 시키는 방법  (0) 2023.01.05
토큰 유효기간 만료 시키는 방법  (0) 2023.01.05