Параметры маршрута
Параметры маршрута во Flask позволяют передавать динамические значения в URL, которые затем могут быть использованы в функциях обработки запросов. В следующем примере демонстрируется, как передать параметр username
в маршрут:
@app.route('/user/')
def user(username):
return f'Привет, {username}!'
Валидация параметров маршрута
Для валидации параметров маршрута во Flask используются конвертеры типов. Это позволяет автоматически проверять соответствие параметра определенному типу данных. Например, чтобы убедиться, что параметр user_id
является целым числом, используйте конвертер int
:
@app.route('/user/')
def user(user_id):
return f'ID пользователя: {user_id}'
Создание пользовательских конвертеров
Вы можете создать собственные конвертеры для валидации и преобразования параметров маршрута. Для этого нужно наследовать класс BaseConverter
и переопределить методы to_python
и to_url
. Например, создадим конвертер для валидации электронных адресов:
from werkzeug.routing import BaseConverter
class EmailConverter(BaseConverter):
regex = r"[^@]+@[^@]+.[^@]+"
def to_python(self, value):
return value.lower()
def to_url(self, value):
return value.lower()
app.url_map.converters['email'] = EmailConverter
Теперь вы можете использовать пользовательский конвертер email
в маршрутах:
@app.route('/email/')
def email(user_email):
return f'Ваш электронный адрес: {user_email}'
Обработка ошибок валидации
Если входящий параметр не соответствует ожидаемому типу данных, Flask автоматически вызывает обработчик ошибок 404. Вы можете настроить это поведение и обрабатывать ошибки валидации самостоятельно, используя try
и except
:
@app.route('/user/')
def user(user_id):
try:
user_id = int(user_id)
except ValueError:
return 'Неверный идентификатор пользователя', 400
return f'ID пользователя: {user_id}'
Заключение
Параметры маршрута и их валидация играют важную роль в создании безопасных и надежных веб-приложений на Flask. Используя встроенные конвертеры типов и создавая собственные конвертеры, вы можете гарантировать, что входящие данные будут соответствовать ожидаемым типам данных и форматам. Это облегчает обработку запросов и снижает риск возникновения ошибок.