Converter 유형
Converter | 설명 | 정규표현식 표현 (regex) |
PathConverter | 같은 string 뿐만 아니라 슬래시( / ) 를 허용 | '[^/].*?' |
UnicodeConverter | 슬래쉬( / )문자는 포함하지 않은 문자열 | '[^/]' + length |
IntegerConverter | 양의 정수를 허용 | r'\d+' |
FloatConverter | 양의 부동 소수점 값을 허용 | r'\d+\.\d+' |
UUIDConverter | UUID 문자열 허용 | r'[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-' \ r'[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}' |
Flask는 URL에 변수를 할당하여 동적으로 만들 수 있습니다.
그 방법은 원하는 변수이름에 "<>"를 붙히면 됩니다.
<variable_name>을 사용해 URL에 변수를 추가할 수 있습니다.
그렇게 되면 함수는 <variable_name>을 키워드 인수로 받아들입니다.
from flask import Flask
app = Flask(__name__)
@app.route('/user/<username>')
def show_user_profile(username):
return f'User is... {username}'
@app.route('/post/<int:intID>')
def show_a(intID):
return 'int is... %d' % intID
@app.route('/post2/<string:stringID>')
def show_b(stringID):
return 'string is... %s' % stringID
@app.route('/path/<path:subpath>')
def show_c(subpath):
return 'Subpath is... %s' % subpath
@app.route('/path2/<uuid:uuID>')
def show_d(uuID):
return 'uuid is... %s' % uuID
컨버터 유형에 대한 예제코드 입니다.
위와 같이 선택적으로 변환기를 사용하여 같은 인수 유형을 지정 할 수 있습니다.
정규표현식의 패턴
여기서 PathConverter의 정규표현식을 살펴보자면,
'[^/].*?' 로 해석하자면,
문자 " / " 를 제외한 최소 0 번 이상 나타나는 문자를 찾는 것 입니다.
아래와 같은 정규표현식의 패턴을 보면 알 수 있습니다.
[^문자] | 괄호안의 문자를 제외한 것 |
$ | 끝나는 문자열 의미 |
. | 모든 문자열(띄어쓰기 포함 \n은 제외) |
[] | 괄호안의 문자들 중 하나. or 처리 묶음 |
* | 없거나 or 있거나 (여러개) |
+ | 최소 한개 or 여러개 |
? | 없거나 or 최대 한개만 {0, 1} 와 동일 |
*? | 없거나, 있거나 and 없거나, 최대한개 : 없음 {0} 와 동일 |
+? | 최소한개, 있거나 and 없거나, 최대한개 : 한개 {1} 와 동일 |
{n} | 최소 n개 이상 |
{m, n} | 최소 m개 이상, 최대 n개 이하 |
더 자세한 정규표현식을 보고싶으시다면 참고 해주세요.
실제로 아래와 같이 코드에 작성하여 정규표현식을 검증해보았습니다.
import re
print(re.findall('[^/].*?', '/hello/flask/instagram'))
# ['h', 'e', 'l', 'l', 'o', 'f', 'l', 'a', 's', 'k', 'i', 'n', 's', 't', 'a', 'g', 'r', 'a', 'm']
print(re.findall('[^/].{0}', '/hello/flask/instagram'))
# ['h', 'e', 'l', 'l', 'o', 'f', 'l', 'a', 's', 'k', 'i', 'n', 's', 't', 'a', 'g', 'r', 'a', 'm']
주석에 나와있는 결과를 보시면 문자 " / " 를 제외한 최소 0 번 이상 나타나는 문자들을 찾은 것을 확인 할 수 있습니다.
Reference Path
'flask' 카테고리의 다른 글
flask clone coding [4] (댓글 API) (0) | 2022.11.20 |
---|---|
WSGI와 Werkzeug (0) | 2022.11.16 |
flask clone coding [3] (JWT 구현) (0) | 2022.11.15 |
flask clone coding [2] (데이터 검증) (0) | 2022.11.13 |
flask clone coding [1] (Flask-SQLAlchemy 3.0 변경사항) (0) | 2022.11.06 |