소개
현대 웹 애플리케이션은 사용자를 돕기 위해 의미 있는 URL 을 사용합니다. 사용자는 기억하기 쉽고 페이지를 직접 방문하는 데 사용할 수 있는 의미 있는 URL 을 사용하는 페이지를 더 좋아하고 다시 방문할 가능성이 높습니다. 이 Lab 에서는 동적 URL 을 구현하고 Flask 에서 여러 규칙을 함수에 연결하는 방법에 중점을 둡니다.
현대 웹 애플리케이션은 사용자를 돕기 위해 의미 있는 URL 을 사용합니다. 사용자는 기억하기 쉽고 페이지를 직접 방문하는 데 사용할 수 있는 의미 있는 URL 을 사용하는 페이지를 더 좋아하고 다시 방문할 가능성이 높습니다. 이 Lab 에서는 동적 URL 을 구현하고 Flask 에서 여러 규칙을 함수에 연결하는 방법에 중점을 둡니다.
이 단계에서는 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'
debug 모드를 활성화하기 위해 스크립트의 main 진입점을 생성합니다.if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
python3 route_decorator.py
그런 다음 인터페이스 상단에 있는 "Web 5000" 탭을 열고 페이지를 새로 고치면 Index Page 메시지를 볼 수 있습니다.
/hello 라우트의 경우, URL 표시줄에 직접 hello 접미사를 추가할 수 있습니다.

그러면 페이지에 Hello, World 메시지가 표시됩니다.
이 단계에서는 <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 문자열 허용 |
debug 모드를 활성화하기 위해 스크립트의 main 진입점을 생성합니다.if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
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 메시지가 표시됩니다.이 단계에서는 후행 슬래시 (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 을 고유하게 유지하는 데 도움이 됩니다.
debug 모드를 활성화하기 위해 스크립트의 main 진입점을 생성합니다.if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
python3 redirection_behavior.py
그런 다음 인터페이스 상단에 있는 "Web 5002" 탭을 열고 URL 표시줄에 직접 projects 접미사를 추가합니다.

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

Not Found 메시지가 표시되어 404 오류를 나타냅니다. 접미사를 about으로 변경하면 올바른 메시지 The about page가 표시됩니다.
이 단계에서는 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 을 만들 수 있습니다.