학습주제
404 에러 처리하기
학습내용
404 페이지는?

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

에러 메세지가 출력되었다.
404 -> 사용자가 무언가 잘못된 요청을 주는거 같다는 서버의 메세지

상태코드 : 404

사실 서버 에러가 아니라 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 에러를 발생시킨다.

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