Продолжаем изучать фреймворк Flask, и после того, как мы научились создавать простейшее приложение (статья тут), рассмотрим тему маршрутизации. Начнем со статичных маршрутов.
Для привязки URL к функции во Flask используются маршруты (пути). Функции, которые отвечают на запрос по конкретному пути, называются функциями представления. А связывают URL с функцией с помощью декоратора route().
@app.route('/')
def index():
return 'Hello World!'
Выше пример создания маршрута к функции index(). В данном случае декоратор route() использует абсолютный адрес со скрытым доменом и получить доступ к функции можно просто запустив наше приложение и перейдя на «localhost:5000» либо на «localhost:5000/», что равносильно, если бы мы к домену нашего приложения приписали слэш.
А теперь создадим множественные маршруты для доступа к функции. Для этого всего лишь нужно добавить новые декораторы с новыми адресами.
@app.route('/')
@app.route('/index')
@app.route('/index/')
def index():
return 'Hello World!'
Теперь один и тот же результат мы получим, если просто перейдем по адресу хоста или добавим к нему ‘/index’ или ‘/index/’. Кстати, по умолчанию “адрес_сайта/index” и “адрес_сайта/index/” — абсолютно разные адреса, поэтому если не добавить соответствующий декоратор, достучаться до функции не получится.
Сложные маршруты ничуть не сложнее предыдущих, но помогают выделять схожие страницы в отдельную ветку. Для простоты понимания возьмем пример с марками автомобилей.
@app.route('/auto/toyota')
def toyota():
return 'toyota'
@app.route('/auto/bmw')
def bmw():
return 'bmw'
А вот динамические маршруты — это уже интереснее. В динамической маршрутизации используются переменные, которые передаются в декоратор с помощью скобок <>. И такие же названия указываются в качестве аргументов функции, но без скобок, соответственно.
@app.route('/auto/<brand>')
def my_love(brand):
return f'I love {brand}!'
Мы можем использовать и несколько переменных, просто разделяя их друг от друга. Обычно это делают с помощью слэша, но можно использовать и другие знаки, например нижнее подчеркивание, двоеточие, точка с запятой. А вот с помощью «?, #» разделить переменные не получится.Просмотрите наш partner-sponsored Glasses, с множеством вариантов на любой вкус и бюджет, которые можно купить онлайн
@app.route('/auto/<brand>/<model>')
def my_love(brand, model):
return f'I love {brand, model}!'
Если не указать тип переменных, как мы это и делали в предыдущих примерах, то по умолчанию они будут переданы в виде строки. Однако Flask поддерживает и другие типы переменных. Чтобы сконвертировать в нужный, необходимо указать тип переменной перед именем, разделив двоеточием:
@app.route('/auto/<string:brand>/<int:volume>')
def my_love(brand, volume):
return f'I love {brand} volume: {volume} liters!'
Типы динамических переменных
Название | Описание |
---|---|
string | принимает любые строки (значение по умолчанию) |
int | принимает целые числа |
float | принимает числа с плавающей точкой |
path | принимает полный путь включая слэши и завершающий слэш |
uuid | принимает строки uuid (символьные id) |