Tiny Star

❌Exception&Error/🔵Python

[❌삽질과 해결 그 사이] 게시판 페이지네이션 : Null

청크 2024. 4. 12. 16:08

요새 파이썬으로 하고있는 게시물 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에서 돌려보면,.!

 

파람도 잘 넘어가고! 데이터도 잘 나오고!

마음이 편안해지는 금요일이다.