소개
현대 웹 애플리케이션은 사용자를 돕기 위해 의미 있는 URL 을 사용합니다. 사용자는 기억하기 쉽고 페이지를 직접 방문하는 데 사용할 수 있는 의미 있는 URL 을 사용하는 페이지를 더 좋아하고 다시 방문할 가능성이 높습니다. 이 Lab 에서는 동적 URL 을 구현하고 Flask 에서 여러 규칙을 함수에 연결하는 방법에 중점을 둡니다.
라우트 데코레이터 (Route Decorator)
이 단계에서는 route() 데코레이터를 사용하여 여러 뷰 함수를 여러 URL 에 바인딩합니다.
route_decorator.py파일을 열고Flask클래스를 가져와서 인스턴스를 생성합니다.
from flask import Flask
app = Flask(__name__)
- 다음으로
route()데코레이터를 사용하여/및/hello두 개의 라우트를 생성하고, 해당 뷰 함수를 바인딩하여 각각 Index Page와 Hello, World를 반환하도록 합니다.
@app.route('/')
def index():
return 'Index Page'
@app.route('/hello')
def hello():
return 'Hello, World'
- 포트 5000 에서 Flask 애플리케이션을 시작하고
debug모드를 활성화하기 위해 스크립트의main진입점을 생성합니다.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- 애플리케이션을 실행하려면 먼저 다음 명령을 사용하여 터미널에서 Flask 애플리케이션을 실행합니다.
python3 route_decorator.py
그런 다음 인터페이스 상단에 있는 "Web 5000" 탭을 열고 페이지를 새로 고치면 Index Page 메시지를 볼 수 있습니다.
/hello 라우트의 경우, URL 표시줄에 직접 hello 접미사를 추가할 수 있습니다.

그러면 페이지에 Hello, World 메시지가 표시됩니다.
변수 규칙 (Variable Rules)
이 단계에서는 <variable_name>으로 섹션을 표시하여 URL 에 변수 섹션을 추가합니다. 선택적으로 <converter:variable_name>과 같이 변수의 유형을 지정하기 위해 컨버터 (converter) 를 사용할 수 있습니다.
variable_rules.py파일을 열고, 먼저Flask클래스와escape를 가져온 다음Flask클래스의 인스턴스를 생성합니다.
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
route()데코레이터에서<variable_name>및<converter:variable_name>패턴을 추가하여 변수 섹션이 있는 동적 URL 을 생성합니다. 뷰 함수가 형식화된 문자열을 반환하도록 합니다.
@app.route('/user/<username>')
def show_user_profile(username):
## show the user profile for that user
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
## show the post with the given id, the id is an integer
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
## show the subpath after /path/
return f'Subpath {escape(subpath)}'
- 다음은 일반적인 컨버터 유형의 표입니다.
| 유형 | 역할 |
|---|---|
string |
(기본값) 슬래시 없이 모든 텍스트 허용 |
int |
양의 정수 허용 |
float |
양의 부동 소수점 값 허용 |
path |
string과 유사하지만 슬래시도 허용 |
uuid |
UUID 문자열 허용 |
- 포트 5001 에서 Flask 애플리케이션을 시작하고
debug모드를 활성화하기 위해 스크립트의main진입점을 생성합니다.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
- 애플리케이션을 실행하려면 먼저 다음 명령을 사용하여 새 터미널에서 Flask 애플리케이션을 실행합니다.
python3 variable_rules.py
그런 다음 인터페이스 상단에 있는 "Web 5001" 탭을 열고 URL 표시줄에 직접 user/Alice 접미사를 추가합니다.

그러면 페이지에 User Alice 메시지가 표시됩니다.
- 접미사
post/1및path/some/path에 대해서도 동일한 작업을 반복할 수 있습니다. 접미사post/1의 경우 Post 1 메시지가 표시됩니다. 접미사path/some/path의 경우 Subpath some/path 메시지가 표시됩니다.
리다이렉션 동작 (Redirection Behavior)
이 단계에서는 후행 슬래시 (trailing slash) 사용에 따라 두 가지 규칙이 어떻게 다른지 배웁니다.
redirection_behavior.py파일을 열고,Flask클래스를 가져와서 인스턴스를 생성합니다.
from flask import Flask
app = Flask(__name__)
route()데코레이터를 사용하여projects라는 뷰 함수가 있는/projects/라는 라우트를 생성합니다.
@app.route('/projects/')
def projects():
return 'The project page'
projects 엔드포인트의 정식 URL 에는 후행 슬래시가 있습니다. 이는 파일 시스템의 폴더와 유사합니다. 후행 슬래시 없이 URL(/projects) 에 액세스하면 Flask 는 후행 슬래시가 있는 정식 URL(/projects/) 로 리디렉션합니다.
about이라는 뷰 함수가 있는/about이라는 다른 라우트를 생성합니다.
@app.route('/about')
def about():
return 'The about page'
about 엔드포인트의 정식 URL 에는 후행 슬래시가 없습니다. 이는 파일의 경로 이름과 유사합니다. 후행 슬래시 (/about/) 가 있는 URL 에 액세스하면 404 Not Found 오류가 발생합니다. 이는 검색 엔진이 동일한 페이지를 두 번 인덱싱하는 것을 방지하는 데 도움이 되므로 이러한 리소스에 대한 URL 을 고유하게 유지하는 데 도움이 됩니다.
- 포트 5002 에서 Flask 애플리케이션을 시작하고
debug모드를 활성화하기 위해 스크립트의main진입점을 생성합니다.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
- 애플리케이션을 실행하려면 먼저 다음 명령을 사용하여 새 터미널에서 Flask 애플리케이션을 실행합니다.
python3 redirection_behavior.py
그런 다음 인터페이스 상단에 있는 "Web 5002" 탭을 열고 URL 표시줄에 직접 projects 접미사를 추가합니다.

그러면 페이지에 The project page 메시지가 표시됩니다. 이는 /projects/ 라우트로 리디렉션되기 때문입니다.
projects 대신 다른 접미사 about/을 추가합니다.

Not Found 메시지가 표시되어 404 오류를 나타냅니다. 접미사를 about으로 변경하면 올바른 메시지 The about page가 표시됩니다.
URL 생성 (URL Building)
이 단계에서는 url_for() 함수를 사용하여 특정 함수에 대한 URL 을 생성합니다. 이 함수는 첫 번째 인수로 함수 이름을, 그리고 URL 규칙의 변수 부분에 해당하는 임의의 수의 키워드 인수를 받습니다. 알 수 없는 변수 부분은 쿼리 매개변수로 URL 에 추가됩니다.
url_building.py파일을 열고, 먼저Flask클래스와url_for를 가져옵니다. 또한Flask클래스의 인스턴스를 생성하는 것을 잊지 마세요.
from flask import Flask, url_for
app = Flask(__name__)
route()데코레이터를 사용하여 세 개의 라우트를 생성하고 해당 뷰 함수를 정의합니다.
@app.route('/')
def index():
return 'index'
@app.route('/login')
def login():
return 'login'
@app.route('/user/<username>')
def profile(username):
return f'{username}\'s profile'
url_for()를 사용해 보기 위해test_request_context()메서드를 사용합니다. 이 메서드는 Python 셸을 사용하는 동안에도 Flask 가 요청을 처리하는 것처럼 동작하도록 지시합니다.
with app.test_request_context():
print(url_for('index'))
print(url_for('login'))
print(url_for('login', next='/'))
print(url_for('profile', username='John Doe'))
url_for('index')는 뷰 함수index에 대한 URL 을 생성하여/를 반환합니다.url_for('login')은 뷰 함수login에 대한 URL 을 생성하여/login을 반환합니다.url_for('login', next='/')는 뷰 함수login에 대한 URL 을 생성하고 추가 쿼리 매개변수next를 포함하여/login?next=/를 반환합니다.url_for('profile', username='John Doe')는 username 변수를John Doe로 설정하여 뷰 함수profile에 대한 URL 을 생성하여/user/John%20Doe를 반환합니다.
- 새 터미널에서
url_building.py파일을 직접 실행합니다.
python3 url_building.py
다음과 같은 출력이 표시됩니다.
/
/login
/login?next=/
/user/John%20Doe
요약
이 Lab 에서는 의미 있는 URL 을 만드는 다양한 방법을 배웠습니다. 웹 애플리케이션을 설계할 때 매우 중요합니다. Flask 의 라우팅 기능을 능숙하게 사용함으로써 사용자의 경험을 향상시키는 체계적이고 직관적인 URL 을 만들 수 있습니다.



