https://seonggongstory.tistory.com/manage/posts/
TISTORY
나를 표현하는 블로그를 만들어보세요.
www.tistory.com
현재는 리스트 검색시 와 즐겨찾기 가 분리
리스트검색시
즐겨찾기 유무가 표시되게 화면수정 하는 작업
먼저 설계먼저 수정
영화리스트 가져오는 api
authorization header를 달아줘야 user token 사용
class안에도
@jwt_required()하지만 그냥 하면
애초에 계획이 비로그인도 보게하는거였기 때문에 그냥 하면
이럴땐
@jwt_required(optional=True) 해주면 된다
두개로 나눠서
로그인되었을때와
안되었을때로 나눠줌
select m.id,m.title,ifnull(count(r.movie_id),0) as cnt , ifnull(avg(r.rating),0) as avg , f.*
from movie m
left join rating r
on r.movie_id = m.id
left join favorite f
on f.movie_id = m.id and f.user_id = 1002
group by m.id
order by cnt desc
limit 0,25;
where절로 따로 빼지말고 그냥 on 합칠때 오른쪽에 and로 붙여줌
user_id가 null이냐 아니냐로
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 f.movie_id = m.id and f.user_id = 1002
group by m.id
order by cnt desc
limit 0,25;
쿼리문안에 넣어주기
(기존) → if 비로그인 일때
else: 로그인했을때 내가 즐겨찾기 한건지 만건지 까지 나옴
최종 수정안
class MovieListResource(Resource) :
@jwt_required(optional=True)
def get(self) :
user_id = get_jwt_identity()
print("유저아이디")
print(user_id)
if user_id is None :
print('비회원 유저가 접속함')
else :
print('회원이 접속함')
order = request.args.get('order')
offset = request.args.get('offset')
limit = request.args.get('limit')
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 r.movie_id = m.id
left join favorite f
on f.movie_id = m.id and f.user_id = %s
group by m.id
order by cnt desc
limit 0,25; '''
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
print(result_list)
return {'result' : 'success',
'items' : result_list,
'count' : len(result_list)}, 200
비로그인
로그인
둘이 다름