728x90
- 해당 기능만을 서술한 포스팅으로, 전체 기능에 대한 소스 코드 확인은 깃허브에서 확인 가능합니다.
https://github.com/hyunsungKR/movie_api_server
from flask import request
from flask_restful import Resource
from mysql_connection import get_connection
from mysql.connector import Error
from flask_jwt_extended import jwt_required
from flask_jwt_extended import get_jwt_identity
class MovieListResource(Resource) :
# 비회원과 회원을 구분 ->> optional=
# 헤더가 있으면 유저아이디를 가져오고
# 헤더가 없으면 None로 가져온다.
@jwt_required(optional=True)
def get(self) :
user_id = get_jwt_identity()
print("유저 아이디")
print(user_id)
order=request.args.get('order')
offset=request.args.get('offset')
limit=request.args.get('limit')
try :
connection = get_connection()
# if 문으로 유저 아이디가 None이면 아래 코드로 그렇지 않으면 else: 아래의 코드로 실행
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 r.movie_id = m.id
group by m.id
order by '''+order+''' desc
limit '''+offset+''','''+limit+''';'''
cursor = connection.cursor(dictionary=True)
cursor.execute(query)
else :
# where를 사용하지 않고 join의 아래에 on의 뒤에 and f.user_id = %s로 변수처리를 해준다
# where를 사용하면 DB에서 변수가 들어있는 데이터만 가져오지만 아래와같이 코드를 작성하면
# user_id가 변수가 아닌 것은 null로 가져온다.
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 r.movie_id = m.id
left join favorite f
on m.id = f.movie_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
print(result_list)
cursor.close()
connection.close()
except Error as e :
print(e)
cursor.close()
connection.close()
return{"result":"fail","error":str(e)}, 500
return {"result" : 'seccess','items':result_list,'count':len(result_list)}, 200
'Rest API' 카테고리의 다른 글
AmazonRekognition을 사용하여 객체탐지(Object detection) / 자동 태그 API 개발 (0) | 2023.01.13 |
---|---|
AmazonRekognition을 사용하여 객체탐지(Object detection) API 개발 (0) | 2023.01.12 |
API서버 - 실시간 추천 기능 구현 (0) | 2023.01.10 |
API 서버 - 구글 코랩으로 추천기능 개발 이후 영화 추천하는 API 개발 ( 배포 ) (0) | 2023.01.09 |
API 서버 - query string 페이징 처리 (0) | 2023.01.06 |