📝회원, 비회원 둘 다 동작하는 API 만들기
클래스 안에 함수를 만들때 위에 @jwt_required()를 입력하면 로그인한 사람만 그 페이지의 정보를 볼 수 있다
로그인 한 사람과 로그인하지 않은 사람도 볼 수 있게 하기 위해서는 @jwt_required(optional=True) 이렇게 입력 해야한다
user_id = get_jwt_identity() 했을때 로그인하지 않은 사람이라면 토큰값이 없기때문에 user_id에 None값이 저장된다
이 값으로 if문을 작성해 로그인한 사람과 로그인하지 않은 사람의 페이지를 다르게 보여줄 수 있다
class MovieListResource(Resource) :
@jwt_required(optional=True) # 비회원도 동작 가능하게 설정
def get(self) :
order = request.args.get('order')
offset = request.args.get('offset')
limit = request.args.get('limit')
user_id = get_jwt_identity()
# 토큰이 없을때는 None값이 저장된다
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 '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
'Restful API' 카테고리의 다른 글
[Restful API] 이미지 S3에 업로드하는 API 만들기 (0) | 2023.01.12 |
---|---|
[Restful API] Query String 검색하는 API 만들기 (0) | 2023.01.10 |
[Restful API] 실시간으로 추천하는 API 만들기 (0) | 2023.01.10 |
[Restful API] DB에 저장된 정보를 가져와서 작업한 후에 추천하는 API 만들기 (0) | 2023.01.09 |
[Error] Object of type Decimal is not JSON serializable (0) | 2023.01.09 |
댓글