티스토리 뷰

IT/Flask

[Flask] URL 생성 (URL Building)

Dragonz 2019. 3. 28. 02:32
반응형

 

라우팅이 설정된 함수에 대한 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
댓글
공지사항