url_for 함수
플라스크의 라우팅 시스템에서 흥미 있는 또 다른 기능은 url_for() 함수 입니다. 이 함수는 주어진 뷰의 실제 URL을 반환합니다.
변수와 컨버터에서 사용한 예제를 사용하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# app.py
from flask import Flask, jsonify, request
from werkzeug.routing import BaseConverter, ValidationError
USERS = {'1': 'Tom', '2': 'John'}
IDS = {val: id for id, val in USERS.items()}
class RegisteredUser(BaseConverter):
def to_python(self, value):
'''
URL 경로를 파이썬 객체로 변환 (ID->유저명)
:param value: 요청된 value
:return: 유저 이름 반환
'''
if value in USERS:
return USERS[value]
raise ValidationError() # 등록되지 않은 유저의 경우 Error raise
def to_url(self, value):
'''
주어진 인수에 해당하는 URL을 만들기 위한 함수(유저명 -> ID)
:param value:
:return:
'''
return IDS[value]
app = Flask(__name__)
app.url_map.converters['registered'] = RegisteredUser
@app.route('/api/person/<registered:name>')
def person(name):
resp = jsonify({'Hello': name})
return resp
if __name__ == '__main__':
app.run()
|
cs |
다음과 같이 app.py를 작성하고, url_for_test.py 파일을 생성합니다.
1
2
3
4
5
6
|
#url_for_test
from app import app
from flask import url_for
with app.test_request_context():
print(url_for('person', name='Tom'))
|
cs |
실행 결과
/api/person/1
url_for('person', name='Tom')
위와 같이 호출하게 되면 'person' URL에서 name의 값이 'Tom'이 되는 url 주소를 반환한다.
이것이 가능한 이유는 app.py의 RegisteredUser 클래스에 선언된 to_url() 함수가 name 변수를 ID로 변환하였기 때문이다.
이 기능은 예제 코드와 같이 실행 문맥에 따라 URL이 달라지는 경우에 유용합니다.
URL을 하드코딩하는 대신 url_for에 함수 이름을 전달하여 정확한 URL을 얻을 수 있습니다.
Flask의 url_for() 함수에 대하여 알아보았습니다.
다음 도서를 참고하였습니다.
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=191830482
'About > Flask' 카테고리의 다른 글
[Python] Flask 전역 공간 (Flask.g) (0) | 2021.09.25 |
---|---|
[Python] Flask Session 저장, 불러오기, 삭제 (0) | 2021.09.05 |
[Python] Flask 변수와 컨버터 (0) | 2021.09.05 |
[Python] boto3를 이용한 Flask-S3 연동 (파일 업로드 및 다운로드) (1) | 2021.07.19 |
[Python] Flask를 이용한 요청 처리 (0) | 2021.06.07 |