https://www.django-rest-framework.org/api-guide/filtering/
지난번 프로젝트에 못 했던 페이지네이션&카테고라이즈 동시 구현
페이지네이션에서 queryset 부분을 바꿔보려고 엄청 헤맸는데 django filter backend로 간단히 해결
너무 간단해서 좀 허무하다 ㅎㅎㅎ
그래도 잘 돼서 다행!
가이드에 나온대로 pip install django-filter한 후 settings.py의 installled apps에 django_filter를 추가한다.
views.py에서 ListAPIView를 쓰는 클래스를 만든다.
class ReviewTypeView(ListAPIView):
"""
타입/지역별 리뷰 목록 조회
"""
queryset = Review.objects.all().order_by("-created_at")
serializer_class = ReviewSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ["content_type_id", "area_code", "sigungu_code"]
urls.py에 path를 지정해주고 정한 url 끝에 ?content_type_id=12&area_code=1등 필터링할 걸 넣고 빼면서 요청을 보내면 된다.
pagination은 그냥 settings.py에서 글로벌하게 설정해준걸 썼다.
화면 구현 시 리뷰만 특정 개수로 바꿔야하면 그때 따로 만들어야겠다.
필터링 response에 message를 추가하고 싶을 때:
https://stackoverflow.com/questions/71456029/how-to-return-custom-response-in-listapiview-in-django
이번 프로젝트엔 결국 도움이 되진 않았지만 유용해 보이는 페이지네이션 정보들:
https://auganrymkhan.com/tutorial/implementing-a-custom-configured-pagination-in-django-rest-framework-using-listapiview-and-apiview
https://stackoverflow.com/questions/61738832/django-rest-pagenumberpagination-object-has-no-attribute-page-error
https://velog.io/@chaeri93/Django-DRF-Pagination-APIView#2-apiview%EC%97%90-pagination_class-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
https://www.django-rest-framework.org/api-guide/pagination/
https://velog.io/@jcinsh/RetrieveUpdateDestroyView-%EC%9D%B4%ED%95%B4
https://stackoverflow.com/questions/63904087/django-rest-framework-pagination-and-filtering
https://ssungkang.tistory.com/entry/Django-DRF-Pagination
https://stackoverflow.com/questions/38031692/django-how-do-i-include-several-elements-in-pagination
https://zoejoyuliao.medium.com/django-rest-framework-add-custom-pagination-c758a4f127fa
https://www.sankalpjonna.com/learn-django/pagination-made-easy-with-django-rest-framework
ㅜㅠㅜㅠ 블로그도 out of memory 에러로 쓰던 글 없어지고 vs code도 MemoryError로 실행 중지 ㅜㅠ
컴퓨터를 한번 껐다 켜야겠다.
TourAPI 사이트에 있는 "콘텐츠 캐싱 금지" 문구와 매니저님 경험담으로 DB에 정보 저장을 안하려 했으나 튜터님과 멘토링 결과 저장하기로 바뀌었다.
검색해보니 DB에 저장하는 포스팅이 많이 있었고 튜터님도 "콘텐츠 캐싱 금지" 목적이 원본 데이터 변경 가능성을 없애기 위해서인 것 같다고 하셔서 우리는 상관 없으니 DB 저장 진행.
사이트에서도 전체 다운로드 서비스는 현재 제공하지 않지만 그 이유가 "다운로드 시간 및 서버 과부하 이슈" 때문이었지 정보 사용 제한 이런건 아니었다.
https://api.visitkorea.or.kr/#/cmsQandADetail
원래 프론트에서 자바스크립트로 api response를 확인해서 여기서 어떻게 관광지 정보를 저장해보려 했으나 .gitignore처럼 node.js나 뭔가 내가 모르는게 더 필요한 것 같다.
어제까지 찾아보고 오늘은 팀장님 방법대로 파이썬으로 도전!
https://www.youtube.com/watch?v=8GH9sinm72c&list=PLOemN3LiCpzlqsFuhr4_vUzkB88N8fhQW&index=4
https://docs.djangoproject.com/ko/4.2/howto/initial-data/
https://uding.tistory.com/16
https://data-soin.tistory.com/54
https://e-hyun.tistory.com/3
대충 어떻게 하는지 알겠는데 파이썬으로 api에 request 해서 reponse받기를 모르겠어서 검색해봤다.
https://www.daleseo.com/python-requests/
pip install requests 후 코딩
---> 에러 발생. 에러 메세지가 길다 ㅜㅠ
requests.exceptions.SSLError만 검색해봤다.
https://blog.naver.com/PostView.nhn?blogId=gracehappyworld&logNo=221585937573&categoryNo=32&parentCategoryNo=0
verify=False를 넣어주면 해결될거라고 했지만 안됨.
https://jemmaa.tistory.com/80
verify=False로 해결 안되면 pip install pyOpenSSL로 해결될거라고 했지만 안됨.
Max retries exceeded with url 이 에러메세지는 왜 나왔을까 검색.
하루 최대 1000번으로 요청 건수 제한이 있지만 분명 그걸 안 넘겼을텐데 왜 나왔을까?
https://co-da-nam.tistory.com/60
나는 해당되지 않지만 분당 100회 이런 제한도 있다고 한다.
그럴땐 sleep으로 시간 조절
나는 왜 저런 메세지가 떴는지 모르겠다.
결론:
https://scribblinganything.tistory.com/530
https가 아니라 http로 요청했어야 하는거였다.
그래서 결국 12개 데이터가 json파일에 잘 저장되는걸 확인한 후 11992개의 데이터 저장을 시도했다.
코드 실행이 길어져서 기다리면서 TIL 작성하던 중 쓰던 글은 out of memory error로 날아가고 vs code에선 MemoryError로 코드 실행 중단 ㅜㅠ
https://spongeb0b.tistory.com/375
컴퓨터를 껐다 켜서 다시 실행해봐야겠다.