[Flask] Redirect

Alexandria·2023년 11월 3일
0

Python3 Flask

목록 보기
3/14
post-thumbnail

1. Redirect

클라이언트가 요청한 페이지나 리소스가 다른 위치에 있다는 것을 알려주고, 클라이언트를 새로운 위치로 자동으로 이동시키는 방법입니다.

HTTP 프로토콜에서 리다이렉트 상태 코드는 여러개가 존재하며, Flask에서 redirect는 기본 값으로 302 코드를 사용합니다.

💡 본 글은 예제 코드를 이용하여 설명합니다.

2. redirect

클라이언트를 다른 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"))

3. url_for

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"))

4. referrer

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는 쉽게 변조될 수 있기 때문에 서버의 도메인과 일치하는지 겸증 로직이 추가되어야 합니다.

profile
IT 도서관

0개의 댓글