Введение
Современные веб-приложения используют осмысленные URL-адреса для помощи пользователям. Пользователи более склонны к тому, чтобы нравиться странице и возвращаться, если страница использует осмысленный URL-адрес, который они могут запомнить и использовать для прямого посещения страницы. В этом лабораторном занятии мы сосредоточимся на том, как реализовать динамические 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'
- Создаем
mainточку входа в скрипт для запуска веб-приложения Flask на порту 5000, включаем режимdebug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
- Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в терминале:
python3 route_decorator.py
Затем откройте вкладку "Web 5000", расположенную в верхней части интерфейса, обновите страницу, и вы увидите сообщение Index Page.
Для маршрута /hello вы можете добавить суффикс hello непосредственно в адресной строке выше.

Затем на странице будет отображено сообщение Hello, World.
Переменные правила
В этом шаге вы добавите переменные разделы в URL, пометив разделы <variable_name>. По желанию вы можете использовать конвертер для указания типа аргумента, например, <converter:variable_name>.
- Откройте файл
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):
## показать профиль пользователя для данного пользователя
return f'User {escape(username)}'
@app.route('/post/<int:post_id>')
def show_post(post_id):
## показать пост с заданным идентификатором, идентификатор - целое число
return f'Post {post_id}'
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
## показать подпуть после /path/
return f'Subpath {escape(subpath)}'
- Ниже приведена таблица общих типов конвертеров:
| Тип | Назначение |
|---|---|
string |
(по умолчанию) принимает любой текст без слеша |
int |
принимает положительные целые числа |
float |
принимает положительные значения с плавающей точкой |
path |
как string, но также принимает слеши |
uuid |
принимает строки UUID |
- Создайте
mainточку входа в скрипт для запуска веб-приложения Flask на порту 5001, включите режимdebug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
- Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в новом терминале:
python3 variable_rules.py
Затем откройте вкладку "Web 5001", расположенную в верхней части интерфейса, и добавьте суффикс user/Alice непосредственно в адресной строке выше.

Затем на странице будет отображено сообщение User Alice.
- Вы также можете повторить те же операции для суффиксов
post/1иpath/some/path. Для суффиксаpost/1отображается сообщение Post 1. Для суффиксаpath/some/pathотображается сообщение Subpath some/path.
Поведение перенаправления
В этом шаге вы узнаете, как два правила различаются в использовании конечного слеша.
- Откройте файл
redirection_behavior.py, импортируйте классFlaskи создайте его экземпляр.
from flask import Flask
app = Flask(__name__)
- Используйте декоратор
route()для создания маршрута/projects/с функцией представленияprojects.
@app.route('/projects/')
def projects():
return 'The project page'
Канонический URL-адрес для конечной точки projects имеет конечный слеш. Это похоже на папку в файловой системе. Если вы обращаетесь по URL-адресу без конечного слеша (/projects), Flask перенаправляет вас на канонический URL-адрес с конечным слешем (/projects/).
- Создайте другой маршрут
/aboutс функцией представленияabout.
@app.route('/about')
def about():
return 'The about page'
Канонический URL-адрес для конечной точки about не имеет конечного слеша. Это похоже на имя файла. Попытка доступа по URL-адресу с конечным слешем (/about/) вызывает ошибку 404 Not Found. Это помогает поддерживать уникальность URL-адресов для этих ресурсов, что, в свою очередь, помогает поисковым системам избежать индексирования одной и той же страницы дважды.
- Создайте
mainточку входа в скрипт для запуска веб-приложения Flask на порту 5002, включите режимdebug.
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5002, debug=True)
- Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в новом терминале:
python3 redirection_behavior.py
Затем откройте вкладку "Web 5002", расположенную в верхней части интерфейса, и добавьте суффикс projects непосредственно в адресной строке выше.

Затем на странице будет отображено сообщение The project page, так как она перенаправляется на маршрут /projects/.
Добавьте вместо projects другой суффикс about/:

Вы должны увидеть сообщение Not Found, что указывает на ошибку 404. Если изменить суффикс на about, то будет отображено правильное сообщение The about page.
Построение URL-адресов
В этом шаге вы будете использовать функцию 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'
- Мы используем метод
test_request_context()для проверкиurl_for(). Он заставляет Flask вести себя так, будто обрабатывает запрос, даже когда мы используем Python-интерпретатор.
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')генерирует URL-адрес для функции представленияindex, получая/.url_for('login')генерирует URL-адрес для функции представленияlogin, получая/login.url_for('login', next='/')генерирует URL-адрес для функции представленияloginи включает дополнительный параметр запросаnext, получая/login?next=/.url_for('profile', username='John Doe')генерирует URL-адрес для функции представленияprofileс переменнойusernameравнойJohn Doe, получая/user/John%20Doe
- Запустите файл
url_building.pyнепосредственно в новом терминале:
python3 url_building.py
Он должен вывести:
/
/login
/login?next=/
/user/John%20Doe
Резюме
В этом практическом занятии мы изучили различные методы создания осмысленных URL-адресов, что очень важно при проектировании веб-приложения. Умелым использованием маршрутизации в Flask вы можете создавать организованные и интуитивные URL-адреса, которые улучшат опыт пользования.



