T.I.L May 1, 2023 (DRF to do list 완료 날짜 수정 기능 구현 중 오류 해결)
2023. 5. 1. 22:43ㆍT.I.L (Today_I_Learned)
발생한 오류
# 문제의 코드
class ToDoCompleteView(APIView):
def put(self, request, todo_id):
todos = get_object_or_404(ToDoList, id=todo_id)
if request.user == todos.user:
serializer = ToDoSerializer(todos, data=request.data)
if serializer.is_valid():
if request.data.get('is_complete') == "true":
serializer.save(completion_at = datetime.datetime.now())
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# 발생한 오류
AssertionError: Expected a `Response`, `HttpResponse` or `HttpStreamingResponse` to be returned from the view, but received a `<class 'NoneType'>`
[02/May/2023 10:03:02] "PUT //todos/1/complete/ HTTP/1.1" 500 80237
시도한 것
우선 에러 메시지를 이해하기 위해 검색해 보았습니다. 에러 메시지에서 "but received a `<class 'NoneType'>" 이 부분은
`Response`, `HttpResponse`, `HttpStreamingResponse` 셋중에 하나의 객체가 아닌 None값이 반환됐다는 것 이었습니다.
결국 반환된 값이 없다는 메시지였습니다. 그래서 반환할 값이 선언된 부분을 다시 살펴보았습니다.
문제해결
문제는 "if request.data.get('is_complete') == "true":" 해당 분기문에 있었습니다. 'is_complete'의 값이 True이면 날짜를 수정하고 그 값을 저장해주는 로직이었는데 True에 해당하는 값 표기를 "true"의 형식으로 잘 못 기입해서 발생한 오류였습니다.
# 수정된 코드
class ToDoCompleteView(APIView):
# permission_classes = [permissions.IsAuthenticated]
def put(self, request, todo_id):
todos = get_object_or_404(ToDoList, id=todo_id)
if request.user == todos.user:
serializer = ToDoSerializer(todos, data=request.data)
if serializer.is_valid():
if request.data.get('is_complete') == True:
serializer.save(completion_at = datetime.datetime.now())
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
느낀점
아직 오타나 개인의 문법적 오류가 많아서 발생한 문제였습니다.
검수에 더 신경을 써야하겠고, 문법적 오류는 아직 문법적으로 이해나 공부가 부족하다고 판단됩니다.
이번 오류를 계기로 파이썬 문법을 빠르게 처음부터 다시 정리해 보며 상황에 맞는 올바른 문법 사용을 위해 노력해야겠습니다.
'T.I.L (Today_I_Learned)' 카테고리의 다른 글
T.I.L May 3, 2023 (Python 문법 - 애매하게 이해하고, 잘못 이해하고, 까먹었던) (0) | 2023.05.03 |
---|---|
T.I.L May 2, 2023 (파스칼 삼각형 재귀함수로 코드 구현해 보기) (0) | 2023.05.02 |
T.I.L Apr 28, 2023 (ERD 연습) (0) | 2023.04.28 |
T.I.L Apr 27, 2023 (재귀함수의 이해) (0) | 2023.04.28 |
T.I.L Apr 26, 2023 (simple jwt 토큰 클레임 커스터마이징 중 만난 오류) (0) | 2023.04.27 |