20. 404 에러 처리하기

data_hamster·2023년 4월 25일

학습주제
404 에러 처리하기

학습내용

404 페이지는?

questions/30000/처럼 임의의 숫자를 넣어 404를 유도한다.


에러 메세지가 출력되었다.

404 -> 사용자가 무언가 잘못된 요청을 주는거 같다는 서버의 메세지

상태코드 : 404

  • 500: 요청을 처리해보도록 노력해봤는데 저한테 뭔가 문제 발생했어요. 버그가 있나봐요.

사실 서버 에러가 아니라 404 에러가 나와야 한다.

여기서 에러가 났다.

만일 우리가 get을 안쓰고 filter를 썼다면,


빈 쿼리 셋만 리턴되고 종료되었을 것.
get은 찾지 못할경우 에러를 발생시킨다는 것을 알 수 있다.

이렇게 get이 에러를 발생시키면 장고 서버에서는 알수없는 에러가 발생했다는 뜻으로 500 코드를 내려주게 된다. 이걸 설명할 수 있는 404 에러로 바꿔보도록 한다.

코드로 넘어간다.

우리는 여기서 에러가 발생하는 부분을 처리해주면 된다. 처리는 우리가 알고 있는 try, except 이다.
except는 아까 장고 셀에서도 발생한 DoesNotExist 오류를 사용한다.

404 에러가 raise 되면, 장고에서는 사용자에게 404 에러메세지를 보여준다. 404 에러를 사용하기 위해 import 해준다.
from django.http import Http404


실행을 했더니 정상적으로 404 메세지가 뜨는 것을 확인할 수 있다.
모델을 통해 값을 찾을 때 못 찾을 경우 raise 404를 하는 경우는, 아주 잦다. 그래서 장고에선 Shortcut을 제공하고 있다.

get_object_or_404 라는 숏컷이다.
코드를 좀 더 간단히 구현할 수 있다.

question = get_object_or_404(Question, pk=question_id)
Question에서 오브젝트를 가져오는데, pk=question_id인 조건을 만족하는 오브젝트 1개를 리턴한다. 단, 없을 경우 404 에러를 발생시킨다.


정상적으로 에러를 출력하는 것을 확인했다.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글