Современные веб-приложения используют осмысленные URL-адреса для помощи пользователям. Пользователи более склонны к тому, чтобы нравиться странице и возвращаться, если страница использует осмысленный URL-адрес, который они могут запомнить и использовать для прямого посещения страницы. В этом лабораторном занятии мы сосредоточимся на том, как реализовать динамические URL-адреса и прикрепить несколько правил к функции в Flask.
В этом шаге вы будете использовать декоратор route() для связывания нескольких функций представления с несколькими URL-адресами.
Откройте файл route_decorator.py, импортируйте класс Flask и создайте его экземпляр.
from flask import Flask
app = Flask(__name__)
Затем мы используем декоратор route() для создания двух маршрутов, / и /hello, связываем соответствующие функции представления, заставляем их возвращать Index Page и 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() для создания трех маршрутов и определите соответствующие функции представления.
Мы используем метод 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-адреса, которые улучшат опыт пользования.
We use cookies for a number of reasons, such as keeping the website reliable and secure, to improve your experience on our website and to see how you interact with it. By accepting, you agree to our use of such cookies. Privacy Policy