728x90
리다이렉트와 에러
리다이렉트 또는 없는 페이지에 대한 에러 처리는 다음 문서에서 참고합니다.
지난 포스팅까지 두 개의 페이지를 만들었었는데요.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/review')
def review():
return render_template('review.html')
if __name__ == '__main__':
app.run(debug=True)
없는 페이지에 접근을 시도하면 404 Not Found 에러가 발생합니다.
위 예제의 에러처리 코드를 추가하고, 에러 페이지(page_not_found.html) 을 생성합니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/review')
def review():
return render_template('review.html')
@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404
if __name__ == '__main__':
app.run(debug=True)
{% extends 'base.html' %}
{% block title %} 페이지를 찾을 수 없습니다. {% endblock %}
{% block desc %} 다음에 다시 시도하여 주시기 바랍니다. {% endblock %}
리다이렉트로 처리해보겠습니다.
redirect(), url_for() 함수를 사용하구요. 메인 페이지에 라우트(/index)를 추가해주었습니다.
from flask import Flask, render_template, redirect, url_for
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/review')
def review():
return render_template('review.html')
# @app.errorhandler(404)
# def page_not_found(error):
# return render_template('page_not_found.html'), 404
@app.errorhandler(404)
def page_not_found(error):
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
디버그 모드에서 302 코드를 확인할 수 있습니다.
302 는 리다이렉트을 의미합니다.
127.0.0.1 - - [29/Jul/2020 13:08:18] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [29/Jul/2020 13:08:24] "GET /sdafffsfds HTTP/1.1" 302 -
127.0.0.1 - - [29/Jul/2020 13:08:24] "GET /index HTTP/1.1" 200 -
'Application > Flask' 카테고리의 다른 글
파이썬 Flask 폼(Form) 전송 (0) | 2020.07.29 |
---|---|
파이썬 Flask render_template() 데이터 전달 / for 문 사용 (2) | 2020.07.29 |
파이썬 Flask 반응형 템플릿 구해서 고치기 -2 : 리소스 경로잡기(Static Files) (0) | 2020.07.29 |
파이썬 Flask 반응형 템플릿 구해서 고치기 -1 : 무료 템플릿 다운로드 (0) | 2020.07.29 |
파이썬 Flask 템플릿(Templates) 사용하기 : 문서 읽어보기 (0) | 2020.07.28 |