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
파이썬 마이크로서비스
파이썬에 대한 기본 지식, 커맨드라인, HTTP 기반 애플리케이션에 대한 기본 지식을 갖추고 있으며, 파이썬 3를 활용한 마이크로서비스 개발, 테스트, 확장, 관리 방법을 배우고 싶은 독자를 대상
www.aladin.co.kr
'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 |