티스토리 뷰
반응형
라우팅이 설정된 함수에 대한 URL을 얻기 위해서는 url_for() 함수를 사용하면 된다. 이 함수는 첫 번째 인자로 함수의 이름과 URL 룰의 변수 부분에 대한 키워드를 인자로 받는다.
파일명 : 4_url_building_test.py
from flask import Flask, url_for #Flask 와 url_for 를 임포트한다.
app = Flask(__name__)
@app.route('/')
def index():
pass
@app.route('/login/')
def login():
pass
@app.route('/user/<username>')
def profile(username):
pass
with app.test_request_context():
# index 함수에 대한 URL 을 화면에 출력
print url_for('index')
# login 함수에 대한 URL 을 화면에 출력
print url_for('login')
# login 함수에 대한 URL 을 화면에 출력
# next 라는 변수에는 '/' 값을 치환하는데 next 변수는 존재하지 않는다.
# 따라서 알수 없는 인자는 쿼리 인자로 URL 뒤쪽에 붙는다.
print url_for('login', next='/')
# profile 함수에 대한 URL 을 화면에 출력
# username 이라는 변수에는 'soo hyuk' 값을 치환
print url_for('profile', username='soo hyuk')
프로그램을 실행하면 아래와 같은 결과를 볼 수 있다.
그렇다면 url_for() 함수를 어떻게 활용할 수 있는지 간단한 프로그램을 통해 알아보자
파일명 : 4_url_building.py
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/admin')
def hello_admin():
return 'Hello admin'
@app.route('/guest/<guest>')
def hello_guest(guest):
return 'Hello %s as guest' % guest
@app.route('/user/<name>')
def hello_user(name):
# URL을 통해 전달받은 name 값이 admin 인 경우 아래 로직을 탄다.
# hello_admin 함수에 대한 URL 을 얻은 후, 그 값을 redirect 한다.
if name == 'admin':
return redirect(url_for('hello_admin'))
# URL을 통해 전달받은 name 값이 admin 이 아닌 경우 아래 로직을 탄다.
# hello_guest 함수에 대한 URL 을 얻어내고, guest 변수에는 name 을 치환한 후 redirect 한다.
else:
return redirect(url_for('hello_guest', guest = name))
if __name__ == '__main__':
app.run('0.0.0.0', '5000', debug=True)
프로그램을 실행한 후 웹브라우저에 "http://127.0.0.1:5000/user/admin" 을 입력해보자.
name 변수에는 "admin" 이 셋팅되므로 hello_admin 함수가 호출되고 "Hello admin" 이라는 문자열이 return 된다.
이번에는 웹브라우저에 "http://127.0.0.1:5000/user/test" 을 입력해보자.
name 변수에는 "test" 가 셋팅되므로 hello_guest 함수가 호출되고 name 값을 인자로 받은 hello_guest 함수는 guest 변수에 값을 치환하여 화면에 출력한다.
반응형
'IT > Flask' 카테고리의 다른 글
[Flask] 템플릿 보여주기 (Template Rendering) (0) | 2019.04.16 |
---|---|
[Flask] HTTP 메소드 (HTTP Method) (0) | 2019.04.16 |
[Flask] 변수 규칙 (Variable Rules) (0) | 2019.03.27 |
[Flask] 라우팅 (Routing) (0) | 2019.03.22 |
[Flask] Application (Hello World) (0) | 2019.03.21 |
댓글
공지사항