Как фильтровать маршруты приложения Flask на основе шаблонов URL-адресов?

Dec 24, 2025Оставить сообщение

Привет! Как поставщик Filtering Flask, я видел множество людей, которые пытались фильтровать маршруты приложения Flask на основе шаблонов URL-адресов. Это может показаться немного техническим, но не волнуйтесь, я здесь, чтобы объяснить вам это простым и понятным способом.

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

Начнем с основ маршрутов Flask. В простом приложении Flask вы определяете маршруты, используя@app.routeдекоратор. Например:

from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Это домашняя страница' @app.route('/about') def about(): return 'Это страница о программе'

В этом простом приложении у нас есть два маршрута: корневой маршрут (/) и о маршруте (). Но что, если мы хотим применить какой-нибудь фильтр, скажем, чтобы разрешить доступ только к определенным шаблонам URL-адресов?

Один из способов сделать это — использовать Flask.before_requestдекоратор. Этот декоратор позволяет запускать функцию перед обработкой каждого запроса. Мы можем использовать его для проверки запрошенного URL-адреса на соответствие набору шаблонов.

from flask import Flask, request, abort app = Flask(__name__) ALLOWED_PATTERNS = [ '/', '/about' ] @app.before_request def strict_access(): если request.path не в ALLOWED_PATTERNS: abort(403) @app.route('/') def index(): return 'Это домашняя страница' @app.route('/about') def about(): return «Это страница о нас»

В этом кодеограничить_доступфункция запускается перед каждым запросом. Он проверяет, находится ли запрошенный путь URL-адреса вALLOWED_PATTERNSсписок. Если это не так, возвращается ошибка 403 Forbidden. Это очень простая форма фильтрации, основанная на точном совпадении URL-адресов.

Laboratory Clear Glass Filtering Flasks With Upper TubulatureLaboratory Glass Conical Shape Erlenmeyer Filtering Flasks With Upper Tubulation

Но что, если мы хотим использовать более гибкие шаблоны, например регулярные выражения? Ну, Flask не имеет встроенной поддержки фильтрации маршрутов на основе регулярных выражений, но мы можем реализовать ее самостоятельно.

Вот пример использования регулярных выражений для фильтрации маршрутов:

import re из колбы import Flask, запрос, прервать приложение = Flask(__name__) ALLOWED_REGEX = [ re.compile(r'^/$'), re.compile(r'^/about$') ] @app.before_request def regex_restrict_access(): для шаблона в ALLOWED_REGEX: if Pattern.match(request.path): Break else: abort(403) @app.route('/') def index(): return 'Это домашняя страница' @app.route('/about') def about(): return 'Это страница с информацией'

В этом коде мы определили список скомпилированных регулярных выражений.regex_restrict_accessФункция циклически перебирает эти шаблоны и проверяет, соответствует ли какой-либо из них запрошенному URL-пути. Если совпадение найдено, запрос разрешается; в противном случае он блокируется с ошибкой 403.

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

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

Как поставщик фильтрующих колб я также хочу упомянуть нашу продукцию. Мы предлагаем широкий ассортимент высококачественных фильтрующих колб, которые идеально подходят для лабораторного использования. Ознакомьтесь с нашимЛабораторные фильтрующие колбы из прозрачного стекла с верхней трубкойиЛабораторные стеклянные колбы Эрленмейера конической формы с верхней трубкой. Эти колбы изготовлены из первоклассного стекла и предназначены для эффективной и надежной фильтрации.

Давайте углубимся в более сложные сценарии фильтрации маршрутов. Например, у вас может быть мультитенантное приложение, где каждый арендатор имеет свой собственный набор разрешенных маршрутов. Чтобы справиться с этой проблемой, вы можете сохранить разрешенные шаблоны в базе данных и выполнять запросы к ней на основе информации о клиенте в запросе.

из колбы import Flask, запрос, прервать импорт sqlite3 app = Flask(__name__) def get_allowed_patterns(tenant_id): conn = sqlite3.connect('tenants.db') курсор = conn.cursor() курсор.execute("ВЫБРАТЬ шаблоны ИЗ арендаторов WHERE id =?", (tenant_id,)) result = курсор.fetchone() conn.close() если результат: return result[0].split(',') return [] @app.before_request def tenant_restrict_access(): tenant_id = request.headers.get('X - Tenant - ID') if tenant_id: разрешенные_паттерны = get_allowed_patterns(tenant_id), если request.path не в разрешенных_паттернах: abort(403) @app.route('/') def index(): return 'Это дом page' @app.route('/about') def about(): return 'Это страница "О программе"

В этом примере мы запрашиваем базу данных SQLite, чтобы получить разрешенные шаблоны для конкретного арендатора. Идентификатор клиента извлекается из заголовков запросов. Если запрошенный URL-адрес отсутствует в списке разрешенных шаблонов для этого клиента, доступ будет запрещен.

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

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

Ссылки:

  • Документация по колбе
  • Документация по регулярным выражениям Python
  • Документация по SQLite