티스토리 뷰

728x90

이전 글에서 리다이렉션에 대해서 배웠는데요.

페이지 요청시 오류가 나면 예를 들어 404 not found(페이지를 찾을 수 없음) 같은 오류들을 우회 시키는 방법으로 redirect 로 이동을 시킬 수도 있겠죠.

Flask는 redirect 대신 error 를 처리 할수 있는 error 핸들링이 있습니다.

@app.errorhandler(HTTP상태코드) 를 사용 하면 됩니다.

사용법은 다음과 같습니다. 404 not found 를 예로 처리를 한다면

@app.errorhandler(404)
def page_not_found(error):
    return "페이지가 없습니다. URL를 확인 하세요", 404

app.route 대신 errorhandler를 사용 하는 것을 볼수 있고 함수에 error 메세지를 넘기는데 이 메세지는 Flask에서 제공되는 기본 오류 메세지 입니다. 

404 Not Found: The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

errorhandler 를 안쓰면 나타나는 기본 메세지와 같습니다.

위와 같이 기본 메세지가 아닌 우리가 원하는 메세지를 클라이언트에 보여 주고 싶을 때는 

return "페이지가 없습니다. URL를 확인 하세요"404

이렇게 쓰면 됩니다. 물론 html 페이지를 만들어 render_template 으로 전달 해도 되겠죠.

일부러 없는 URL로 요청을 해보겠습니다.

만약 뒤에 에러 코드 404를 전달 하지 않으면 어떤 결과가 나오는지 봅시다.

return "페이지가 없습니다. URL를 확인 하세요"

메세지는 오류 메세지를 보여주지만 상태코드는 200 정상으로 뜨네요. 그래서 뒤에 에러 코드를 보내 줘야 브라우저에서는 어떤 에러인지를 알 수 있겠네요.

 

URL요청시 강제로 에러 상태 코드로 내 보낼수도 있습니다. abort(에러코드) 인데요. 사용법은 아래와 같습니다.

만약 /nopage 라고 만들어 404 에러로 보내 보겠습니다.

@app.route('/nopage')
def nopage ():
    print("404로 보냅니다.")
    abort(404)
    return "404로 보냅니다."

웹브라우저에 http://127.0.0.1:5000/nopage 로 접근 해 보겠습니다.

app.route("/nopage")가 있고 "404 로 보냅니다." 가 나오게 return 을 하는데도 404 에러로 보내네요.

return 전에 abort가 되고 404 에러 코드를 만들고 @app.errorhandler(404로 보내서 위와 같은 메세지를 볼수 있습니다. 그런데 abort(404)전에 print("404로 보냅니다.") 이 메세지가 나오는지는 당연히 abort 전이기 때문에 찍히는것을 볼 수 있습니다.

에러 핸들링에 대해 다뤄 보았습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함