클라이언트가 요청한 페이지나 리소스가 다른 위치에 있다는 것을 알려주고, 클라이언트를 새로운 위치로 자동으로 이동시키는 방법입니다.
HTTP 프로토콜에서 리다이렉트 상태 코드는 여러개가 존재하며, Flask에서 redirect
는 기본 값으로 302 코드를 사용합니다.
💡 본 글은 예제 코드를 이용하여 설명합니다.
클라이언트를 다른 URL로 리디렉션(재전송)하는 데 사용되는 함수입니다. 주로 사용자를 다른 경로로 이동시키거나, 요청을 처리한 후 클라이언트를 다른 페이지로 보낼 때 유용합니다.
flask/source/my_app/views/index.py를 살펴보면 location 인자로 리다이렉트 시키는 데이터를 반환합니다.
@bp_index.route(rule="/logout", methods=["GET"])
@login_required
def logout():
logout_user()
return redirect(location=url_for(endpoint="index.login"))
URL 생성을 쉽게 처리하고 URL 규칙을 변경할 경우 코드의 수정을 최소화하기 위한 강력한 도구입니다.
url_for에 "블루프린트 이름.함수 이름"
을 전달하면 해당 함수가 등록된 경로가 반환됩니다.
flask/source/my_app/views/index.py를 살펴보면 redirect의 location 인자에 url_for(endpoint="index.login") 함수를 전달하였습니다. 따라서, location에 전달되는 값은 "/"이 됩니다.
@bp_index.route(rule="/logout", methods=["GET"])
@login_required
def logout():
logout_user()
return redirect(location=url_for(endpoint="index.login"))
HTTP 요청의 Referer 헤더 값을 나타내는 Flask 요청 객체의 속성입니다.
Referer 헤더는 현재 요청을 보내는 웹 페이지의 이전 URL을 나타냅니다.
이를 이용하여 리다이렉트를 이전 페이지로 지정할 수 있습니다.
다음은 예제 코드에서는 사용하지 않았지만, Flask에서 referrer를 사용하는 방법을 나타냅니다.
from flask import redirect, request
# 코드 생략
@app.route(rule="/", methods=["GET"])
def index():
return redirect(location=request.referrer)
❗ referrer는 쉽게 변조될 수 있기 때문에 서버의 도메인과 일치하는지 겸증 로직이 추가되어야 합니다.