군침이 싹 도는 코딩
API JWT 토큰 로그인 유무에 따라 다르게 처리하는법 본문
@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 |