요새 파이썬으로 하고있는 게시물 CRUD + JS
개발하다보니 게시판하면 빠질 수 없는 페이지네이션 기능을 구현해야했다.
페이지네이션은 자바에서도 안해보고 프로젝트 당시 팀원 버스에 무임승차해서 만든 경험뿐이라
지식이 하나도 있지 않은 상태에서 던져진 선임님의 예시코드.
하나씩 이해해가며 파이썬과 장고에서는 어떻게 페이지네이션 백 로직을 구성할 수 있는지 이해하고
예시코드를 기반으로 게시판 페이지네이션 서버 로직을 완성했으나....
무자비하게 만난 에러코드.
물론 저 예외는 내가 Exception에서 정의하고 View.py 로직에서 raise로 예외처리를 한 것....
예외처리를 하지 않으니까 500코드와 함께
Expected a `Response`, `HttpResponse` or `StreamingHttpResponse` to be returned from the view, but received a `<class 'NoneType'>` 이런 로그가 찍힌다.
페이지네이션이 조회되지 않는거랑 별개로 Django View.py 내에서 예상했던 Response객체가 아닌
None값이 반환되어 나타나는 오류로 뷰 함수나 메서드가 유효한 HTTP 응답 객체를 반환하지 않고
종료되어 나타나는 예외이기 때문에 로직 내에서 잡아주는게 맞다.
다시 논점으로 돌아와 지금 가장 큰 문제점 data가 null값이라는 것.
대체 뭐가문제인지 같은 코드를 4시간 째 지웠다썼다 바꿨다가되돌렸다가 난리를 쳤는데
결국 한 단어로 이 예외를 해결할 수 있었다.
그건 바로 required=Flase....
django내에 저장된 모델 인스턴스를 REST API에서 사용하는 JSON형태로 받기 위해
파이썬에서는 serializer를 사용하는데, serializer.py 내에 페이지네이션을 위해 직렬화시키는 용도로
BoardPaginationRequestSerializer class를 하나 생성했었다.
이 클래스에서는 페이지네이션을 위한 id값을 IntegerField로 받고 있는데,,
내가 이 id값을 필수로 받아야하는 것으로 코드를 작성했던거다.
class BoardPaginationRequestSerializer(PaginationSerializer):
id = serializers.IntegerField()
아무것도 명시하지 않았기에 당연히 required는 True였을거고..
전체 게시물에 대한 페이지네이션이 목적이었던 나는 조회할 때 id값을 따로 넣지않았다.
내 바보짓으로 인해 필연적으로 발생할 수 밖에 없었던 예외였던거다.
class BoardPaginationRequestSerializer(PaginationSerializer):
id = serializers.IntegerField(required=False)
ㅠ.. 재빨리 required=Flase 옵션을 넣어주고 다시 swagger에서 돌려보면,.!
파람도 잘 넘어가고! 데이터도 잘 나오고!
마음이 편안해지는 금요일이다.
'❌Exception&Error > 🔵Python' 카테고리의 다른 글
[❌삽질과 해결 그 사이] ImportError : cannot import name 'b64encode' from 'jwt.utils' (0) | 2024.04.30 |
---|---|
[❌삽질과 해결 그 사이] 게시판-댓글 페이지네이션 조회가 안될 때 (0) | 2024.04.22 |
[❌삽질과 해결 그 사이] 'set' object is not reversible (0) | 2024.04.02 |
[❌삽질과 해결 그 사이] TypeError: 'method' object is not iterable | iterrows 문법오류 (0) | 2024.03.28 |
[❌삽질과 해결 그 사이] Invalid argument : 파일 경로 에러 (0) | 2024.03.28 |