Смысловые URL-адреса для динамических веб-приложений

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Современные веб-приложения используют осмысленные URL-адреса для помощи пользователям. Пользователи более склонны к тому, чтобы нравиться странице и возвращаться, если страница использует осмысленный URL-адрес, который они могут запомнить и использовать для прямого посещения страницы. В этом лабораторном занятии мы сосредоточимся на том, как реализовать динамические URL-адреса и прикрепить несколько правил к функции в Flask.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/keyword_arguments("Keyword Arguments") python/ModulesandPackagesGroup -.-> python/importing_modules("Importing Modules") python/FileHandlingGroup -.-> python/with_statement("Using with Statement") python/AdvancedTopicsGroup -.-> python/decorators("Decorators") subgraph Lab Skills python/strings -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} python/function_definition -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} python/keyword_arguments -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} python/importing_modules -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} python/with_statement -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} python/decorators -.-> lab-148877{{"Смысловые URL-адреса для динамических веб-приложений"}} end

Декоратор маршрута

В этом шаге вы будете использовать декоратор route() для связывания нескольких функций представления с несколькими URL-адресами.

  1. Откройте файл route_decorator.py, импортируйте класс Flask и создайте его экземпляр.
from flask import Flask
app = Flask(__name__)
  1. Затем мы используем декоратор route() для создания двух маршрутов, / и /hello, связываем соответствующие функции представления, заставляем их возвращать Index Page и Hello, World соответственно.
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello, World'
  1. Создаем main точку входа в скрипт для запуска веб-приложения Flask на порту 5000, включаем режим debug.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)
  1. Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в терминале:
python3 route_decorator.py

Затем откройте вкладку "Web 5000", расположенную в верхней части интерфейса, обновите страницу, и вы увидите сообщение Index Page.

Для маршрута /hello вы можете добавить суффикс hello непосредственно в адресной строке выше.

Пример декоратора маршрута Flask

Затем на странице будет отображено сообщение Hello, World.

Переменные правила

В этом шаге вы добавите переменные разделы в URL, пометив разделы <variable_name>. По желанию вы можете использовать конвертер для указания типа аргумента, например, <converter:variable_name>.

  1. Откройте файл variable_rules.py, сначала импортируйте класс Flask и escape, затем создайте экземпляр класса Flask.
from flask import Flask
from markupsafe import escape
app = Flask(__name__)
  1. В декораторе 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
  1. Создайте main точку входа в скрипт для запуска веб-приложения Flask на порту 5001, включите режим debug.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5001, debug=True)
  1. Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в новом терминале:
python3 variable_rules.py

Затем откройте вкладку "Web 5001", расположенную в верхней части интерфейса, и добавьте суффикс user/Alice непосредственно в адресной строке выше.

Пример динамического URL-адреса Flask

Затем на странице будет отображено сообщение User Alice.

  1. Вы также можете повторить те же операции для суффиксов post/1 и path/some/path. Для суффикса post/1 отображается сообщение Post 1. Для суффикса path/some/path отображается сообщение Subpath some/path.

Поведение перенаправления

В этом шаге вы узнаете, как два правила различаются в использовании конечного слеша.

  1. Откройте файл redirection_behavior.py, импортируйте класс Flask и создайте его экземпляр.
from flask import Flask
app = Flask(__name__)
  1. Используйте декоратор route() для создания маршрута /projects/ с функцией представления projects.
@app.route('/projects/')
def projects():
    return 'The project page'

Канонический URL-адрес для конечной точки projects имеет конечный слеш. Это похоже на папку в файловой системе. Если вы обращаетесь по URL-адресу без конечного слеша (/projects), Flask перенаправляет вас на канонический URL-адрес с конечным слешем (/projects/).

  1. Создайте другой маршрут /about с функцией представления about.
@app.route('/about')
def about():
    return 'The about page'

Канонический URL-адрес для конечной точки about не имеет конечного слеша. Это похоже на имя файла. Попытка доступа по URL-адресу с конечным слешем (/about/) вызывает ошибку 404 Not Found. Это помогает поддерживать уникальность URL-адресов для этих ресурсов, что, в свою очередь, помогает поисковым системам избежать индексирования одной и той же страницы дважды.

  1. Создайте main точку входа в скрипт для запуска веб-приложения Flask на порту 5002, включите режим debug.
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5002, debug=True)
  1. Чтобы запустить приложение, сначала используйте следующие команды для запуска веб-приложения Flask в новом терминале:
python3 redirection_behavior.py

Затем откройте вкладку "Web 5002", расположенную в верхней части интерфейса, и добавьте суффикс projects непосредственно в адресной строке выше.

Пример маршрута projects в Flask

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

Добавьте вместо projects другой суффикс about/:

Отображение страницы ошибки 404

Вы должны увидеть сообщение Not Found, что указывает на ошибку 404. Если изменить суффикс на about, то будет отображено правильное сообщение The about page.

Построение URL-адресов

В этом шаге вы будете использовать функцию url_for() для построения URL-адреса для определенной функции. Она принимает имя функции в качестве первого аргумента и любое количество именованных аргументов, каждый из которых соответствует переменной части правила URL-адреса. Неизвестные переменные части добавляются в URL-адрес в виде параметров запроса.

  1. Откройте файл url_building.py, и сначала импортируйте класс Flask и url_for. Не забудьте также создать экземпляр класса Flask.
from flask import Flask, url_for
app = Flask(__name__)
  1. Используйте декоратор 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'
  1. Мы используем метод 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
  1. Запустите файл url_building.py непосредственно в новом терминале:
python3 url_building.py

Он должен вывести:

/
/login
/login?next=/
/user/John%20Doe

Резюме

В этом практическом занятии мы изучили различные методы создания осмысленных URL-адресов, что очень важно при проектировании веб-приложения. Умелым использованием маршрутизации в Flask вы можете создавать организованные и интуитивные URL-адреса, которые улучшат опыт пользования.