이런 페이지를 만들어야 한다면
우선 로그인이 되어 있어야 한다,
즐겨찾기 구분을 해줘야하고,
영화 이름 정보를 가져와야하고,
리뷰 갯수 토탈과, 별점 평균을 구해야하고
옾셋, 리밋 25로 설정한 것으로
리뷰로 정렬한 페이지
별점으로 정렬한 페이지
를 만들면 되겠다
API 설정
HTTP 메소드는
CRUD중 Read에 해당하는
GET로 설정후
offset과 limit을 설정
정렬에 해당하는 order는 리뷰갯수로 일단 설정후
나중에 별점평균으로 설정하고 싶다면 바꾸라는 메세지를 추가로 작성해준다
app.py 설정
api.add_resource(MovieResources, '/movie')
경로 설정해주고 다음으로 넘어간다
movie.py 설정
class MovieResources(Resource) :
@jwt_required()
def get(self):
offset = request.args['offset']
limit = request.args['limit']
order = request.args.get['order']
user_id = get_jwt_identity()
클래스를 입력해주고
회원정보가 필요하니
jwt_required를 작성
그리고 get 함수로 설정
그리고 경로? 이후로 설정되어있는 주소에서 가져올 정보를
리퀘스트 겟으로 가져오고
유저 아이디도 jwt 토큰으로 가져온다
DB연결, 쿼리문 작성
try:
connection = get_connection()
query = '''select m.id, m.title,
count(r.id) as reviewCnt,
ifnull( avg(r.rating), 0 ) as avgRating,
if( f.id is null , 0 ,1) as isFavorite
from movie m
left join review r
on m.id = r.movieId
left join favorite f
on m.id = f.movieId and f.userId = %s
group by m.id
order by '''+ order +''' desc
limit '''+ offset +''', '''+ limit +''';'''
record = (user_id, )
쿼리문은 이전에 작성해둔게 있어 copy&paste 하고
정렬 부분의 order와
페이징의 offset과 limit은 변수처리 할 수 있게
문자열로 처리 해준다
커서 사용, 해제, 에러상황 대처
cursor = connection.cursor(dictionary=True)
cursor.execute(query, record)
result_list = cursor.fetchall()
print(result_list)
cursor.close()
connection.close()
except Error as e:
if cursor is not None:
cursor.close()
if connection is not None:
connection.close()
return{"result" : "fail", "error" : str(e)}, 500
그 후 커서 사용과 해제, 에러처리 문구를 적고
파일형식 변환 및 클라이언트에게 JSON으로 리턴
i = 0
for row in result_list :
result_list[i]['avgRating'] = float(row['avgRating'])
i = i + 1
return{"result" : "success",
"item" : result_list,
"cnt" : len(result_list)}
결과를 클라이언트에게 보여주기 전에
별점 평균을 나타내고 있는 타입이
decimal 타입인데
이 형식은
MySQL에서 고정 소수점 타입인데
이 형식이 json으로는 처리 할 수 없어서
float으로의 변환이 필요하다
그렇기에 반복문을 이용하여 별점평균의 행을 모두 float으로 변환후에
결과를 보여주도록 하자
'API > MySQL API' 카테고리의 다른 글
Python으로 Mysql접속, 사진 업로드&오토태깅&DB저장 API, 포스팅 수정&DB수정 API (4) | 2024.05.29 |
---|---|
Python으로 Mysql 접속, 영화추천 API (0) | 2024.05.27 |
Python으로 Mysql 접속, 회원 정보 수정 API (0) | 2024.05.24 |
Python으로 Mysql 접속, 회원탈퇴 API (0) | 2024.05.24 |
Python으로 Mysql 접속, 로그아웃 API (0) | 2024.05.22 |