Flask를 공부하면서 url_for(), redirect() 함수를 자주 사용하는데,
정확하게 기능을 파악하고자 적게 되었습니다. ^&^
url_for() :
주로 웹 페이지를 이동(변경)할 때, 즉 다음 페이지의 URL을 url_for() 함수에 넣어서 전달합니다.
또는 url_for( ) 괄호 안에 route 함수 명을 넣으면 해당 route가 가지는 url 주소를 가져옵니다.
flask는 url_for()을 통해 python 파일과 html 파일 간의 URL 및 데이터(파라미터)까지 편하게 전달할 수 있습니다.
<예시>
<!-- app.py 파일 -->
from flask import Flask, url_for
@app.route("/")
def hello():
return render_template('hello.html')
@app.route("/apply")
def apply():
return render_template('apply.html')
-> "/" 루트 디렉터리에 있을 경우 hello() 함수를 반환한다.
그래서 결과적으로 'hello.html' 파일을 반환한다.(웹에 보여집니다.)
"/apply"인 경우에는 'apply.html' 파일이 보입니다.
"/" 에서 동적 라우팅을 통해 "/apply" 로 연결하는 방법
<!-- 'hello.html'에 a태그에 작성 -->
<!-- 방법. 1 -->
<a href="{{ url_for('apply') }}">집 등록하기</a>
<!-- 방법. 2 -->
<a href="{{ url_for('/apply') }}">집 등록하기</a>
url_for() 괄호 안에 함수 or 경로와 전달해 줄 값(파라미터) 같이 전달하기
여러 항목이 있는 웹 페이지에서 하나의 페이지를 선택하면 해당하는 페이지로 이동하여 다른 페이지를 보게 됩니다.
예를 들어 부동산의 집 리스트를 본다고 가정해 보자,
각 집을 보러 페이지를 들어가 보면 내용과 사진은 다르지만, 우리가 보는 페이지의 틀은 똑같습니다.
하나의 틀에 다른 데이터를 받아 보여주는 것인데, 하나의 페이지마다 route를 생성하면 비효율적이므로
하나의 route를 "/house_info/<int:index>/" 작성하여 여러 페이지를 보여줍니다.
<!-- 'list.html' 코드 일부 -->
<a href="{{ url_for('house_info', index=house[0]) }}">
<!-- app.py -->
@app.route("/house_info/<int:index>/")
def house_info(index):
return render_template("house_info.html")
Flask에서 경로는 매개변수와도 작동하므로 정수 또는 문자열이 될 매개변수를 사용하여 다른 경로를 생성합니다.
url_for() 함수를 전달할 때 경로 내 ("/house_info/") 에서 동일한 이름의 매개변수를 사용하고 있는지 확인합니다.
index 매개변수를 반환하고, url_for() 함수를 사용하여 다른 함수의 경로에서 이 함수를 액세스 합니다.
redirect() :
URL 또는 링크를 사용하여 사용자를 Flask 애플리케이션의 특정 페이지로 리디렉션 하는 데 사용합니다.
이제 url_for() 함수를 통해 URL만 반환하는 대신, 사용자를 특정 URL로 리디렉션 할 수 있습니다.
예시로 Button 을 눌렀을 때 Main 페이지로 이동할 때도 사용됩니다.
@app.route("/upload_done", methods=["POST"])
def upload_done():
return redirect(url_for("hello"))
# redirect (URL 다시 연결해주는 함수 ) -> hello 라는 함수로 보내기