Изменения
Версия 3.1.1
Не выпущена
- Исправить подсказку типа для
cli_runner.invoke. #5645
Версия 3.1.0
Выпущена 2024-11-13
- Убрать поддержку Python 3.8. #5623
- Обновить минимальные версии зависимостей до последних релизов функций. Werkzeug >= 3.1, ItsDangerous >= 2.2, Blinker >= 1.9. #5624,5633
- Предоставить параметр конфигурации для управления автоматическими ответами на опции. #5496
-
Flask.open_resource/open_instance_resourceиBlueprint.open_resourceпринимают параметрencoding, используемый при открытии в текстовом режиме. По умолчанию значениеutf-8. #5504 -
Request.max_content_lengthможет быть настраиваемым для каждого запроса вместо настройки только через конфигурациюMAX_CONTENT_LENGTH. Добавлена конфигурацияMAX_FORM_MEMORY_SIZEиMAX_FORM_PARTS. Добавлены документация о лимитах ресурсов на страницу безопасности. #5625 - Добавить поддержку атрибута cookie
Partitioned(CHIPS) с помощью конфигурацииSESSION_COOKIE_PARTITIONED. #5472 -
-e pathимеет приоритет над значениями по умолчанию для файлов.envи.flaskenv.load_dotenvзагружает файлы по умолчанию дополнительно к пути, если не передаетсяload_defaults=False. #5628 - Поддержка вращения ключей с конфигурацией
SECRET_KEY_FALLBACKS, списком старых секретных ключей, которые все еще могут использоваться для проверки подписи. Расширениям потребуется добавить поддержку. #5621 - Исправить взаимодействие установки
host_matching=Trueилиsubdomain_matching=FalseсSERVER_NAME. УстановкаSERVER_NAMEбольше не ограничивает запросы только этим доменным именем. #5553 -
Request.trusted_hostsпроверяется во время маршрутизации и может быть установлено через конфигурациюTRUSTED_HOSTS. #5636
Версия 3.0.3
Выпущена 2024-04-07
Версия 3.0.2
Выпущена 2024-02-03
Версия 3.0.1
Выпущена 2024-01-18
- Исправить тип аргумента
pathдляsend_file. #5336 - Исправить опечатку в сообщении об ошибке для параметра
flask run --key. #5344 - Данные сессии не помечены без использования встроенных
json.loadsobject_hook. Это позволяет использовать другие поставщики JSON, которые не реализуют это. #5381 - Обработать больше находок типов при использовании режима mypy strict. #5383
Версия 3.0.0
Выпущена 2023-09-30
- Удалить ранее устаревший код. #5223
- Устареть атрибут
__version__. Используйте обнаружение функций илиimportlib.metadata.version("flask")вместо него. #5230 - Перестроить код таким образом, чтобы классы Flask (app) и Blueprint имели базовые классы Sans-IO. #5127
- Разрешить self в качестве аргумента url_for. #5264
- Требовать Werkzeug >= 3.0.0.
Версия 2.3.3
Выпущена 2023-08-21
- Совместимость с Python 3.12.
- Требовать Werkzeug >= 2.3.7.
- Использовать
flit_coreвместоsetuptoolsв качестве бэкенда сборки. - Переработать способ определения корневого и экземплярного путей приложения. #5160
Версия 2.3.2
Выпущена 2023-05-01
- Установить заголовок
Vary: Cookieпри обращении, изменении или обновлении сессии. - Обновить требование к Werkzeug до >=2.3.3 для применения последних исправлений ошибок.
Версия 2.3.1
Выпущена 2023-04-25
- Восстановить устаревший
from flask import Markup. #5084
Версия 2.3.0
Выпущена 2023-04-25
- Убрать поддержку Python 3.7. #5072
- Обновить минимальные требования до последних версий: Werkzeug>=2.3.0, Jinja2>3.1.2, itsdangerous>=2.1.2, click>=8.1.3.
-
Удалить ранее устаревший код. #4995
- Методы
pushиpopустаревших объектов_app_ctx_stackи_request_ctx_stackудалены.topвсе еще существует, чтобы дать расширениям больше времени на обновление, но он будет удален. - Переменная среды
FLASK_ENV, ключ конфигурацииENVи свойствоapp.envудалены. - Свойства
session_cookie_name,send_file_max_age_default,use_x_sendfile,propagate_exceptionsиtemplates_auto_reloadобъектаappудалены. - Ключи конфигурации
JSON_AS_ASCII,JSON_SORT_KEYS,JSONIFY_MIMETYPEиJSONIFY_PRETTYPRINT_REGULARудалены. - Декораторы
app.before_first_requestиbp.before_app_first_requestудалены. -
Атрибуты
json_encoderиjson_decoderв app и blueprint, а также соответствующие классыjson.JSONEncoderиJSONDecoderудалены. - Функции
json.htmlsafe_dumpsиhtmlsafe_dumpудалены. - Вызов методов настройки для blueprint после регистрации является ошибкой, а не предупреждением. #4997
- Методы
- Импорт
escapeиMarkupизflaskустарел. Импортируйте их напрямую изmarkupsafeвместо этого. #4996 - Свойство
app.got_first_requestустарело. #4997 - Декоратор
locked_cached_propertyустарел. Используйте блокировку внутри декорированной функции, если требуется блокировка. #4993 - Сигналы всегда доступны.
blinker>=1.6.2является обязательной зависимостью. Атрибутsignals_availableустарел. #5056 - Сигналы поддерживают функции-подписчиков
async. #5049 - Удалить использование блокировок, которые могут вызывать блокировку запросов друг другом очень кратковременно. #4993
- Использовать современные метаданные упаковки с
pyproject.tomlвместоsetup.cfg. #4947 - Убедиться, что поддомены применяются с вложенными blueprint. #4834
-
config.from_fileможет использоватьtext=Falseдля указания того, что парсеру нужен двоичный файл вместо текстового. #4989 - Если blueprint создается с пустым именем, генерируется ошибка
ValueError. #5010 -
SESSION_COOKIE_DOMAINне используетSERVER_NAMEв качестве обратного преобразования. По умолчанию домен не устанавливается, что современные браузеры интерпретируют как точное совпадение, а не как совпадение по поддомену. Предупреждения оlocalhostи IP-адресах также удалены. #5051 - Команда
routesпоказываетsubdomainилиhostкаждого правила при использовании сопоставления по домену. #5004 - Использовать отложенную оценку аннотаций. #5071
Версия 2.2.5
Выпущено 2023-05-02
- Обновление для совместимости с Werkzeug 2.3.3.
- Устанавливается заголовок
Vary: Cookieпри доступе, изменении или обновлении сеанса.
Версия 2.2.4
Выпущено 2023-04-25
- Обновление для совместимости с Werkzeug 2.3.
Версия 2.2.3
Выпущено 2023-02-15
Версия 2.2.2
Выпущено 2022-08-08
Версия 2.2.1
Выпущено 2022-08-03
- Установка или доступ к
json_encoderилиjson_decoderвызывает предупреждение об устаревании. #4732
Версия 2.2.0
Выпущено 2022-08-01
-
Удален ранее устаревший код. #4667
- Старые имена некоторых параметров
send_fileбыли удалены.download_nameзаменяетattachment_filename,max_ageзаменяетcache_timeout, аetagзаменяетadd_etags. Кроме того,pathзаменяетfilenameвsend_from_directory. - Свойство
RequestContext.g, возвращающееAppContext.g, удалено.
- Старые имена некоторых параметров
- Обновление зависимости Werkzeug до >= 2.2.
-
Контексты приложения и запроса управляются непосредственно с помощью переменных контекста Python, а не через механизм
LocalStackWerkzeug. Это должно привести к улучшенной производительности и использованию памяти. #4682- Разработчики расширений, обратите внимание, что
_app_ctx_stack.topи_request_ctx_stack.topустарели. Храните данные вg, используя уникальный префикс, например,g._extension_name_attr.
- Разработчики расширений, обратите внимание, что
- Переменная среды
FLASK_ENVи атрибутapp.envустарели, устраняя различие между режимами разработки и отладки. Режим отладки должен контролироваться непосредственно параметром--debugилиapp.run(debug=True). #4714 - Некоторые атрибуты, которые проксировали ключи конфигурации в
app, устарели:session_cookie_name,send_file_max_age_default,use_x_sendfile,propagate_exceptionsиtemplates_auto_reload. Используйте соответствующие ключи конфигурации вместо них. #4716 -
Добавлены новые точки настройки в объект приложения
Flaskдля многих ранее глобальных поведений.-
flask.url_forбудет вызыватьapp.url_for. #4568 -
flask.abortбудет вызыватьapp.aborter.Flask.aborter_classиFlask.make_aborterмогут использоваться для настройки этого прерывания. #4567 -
flask.redirectбудет вызыватьapp.redirect. #4569 -
flask.jsonявляется экземпляромJSONProvider. Можно установить другой поставщик для использования другой библиотеки JSON.flask.jsonifyбудет вызыватьapp.json.response, другие функции вflask.jsonбудут вызывать соответствующие функции вapp.json. #4692
-
- Конфигурация JSON перемещена в атрибуты по умолчанию
app.jsonпоставщика.JSON_AS_ASCII,JSON_SORT_KEYS,JSONIFY_MIMETYPEиJSONIFY_PRETTYPRINT_REGULARустарели. #4692 - Установка пользовательских классов
json_encoderиjson_decoderв приложении или в модуле blueprints, а также соответствующих классовjson.JSONEncoderиJSONDecoder, устарели. Теперь поведение JSON можно переопределить с помощью интерфейса поставщикаapp.json. #4692 -
json.htmlsafe_dumpsиjson.htmlsafe_dumpустарели, функция теперь встроена в Jinja. #4692 - Рефакторинг
register_error_handlerдля консолидации проверки ошибок. Переписаны некоторые сообщения об ошибках для большей согласованности. #4559 - Использование декораторов и функций Blueprint, предназначенных для настройки после регистрации модуля, выведет предупреждение. В следующей версии это станет ошибкой, как и методы настройки приложения.
-
before_first_requestустарело. Выполняйте код настройки при создании приложения вместо этого. #4605 - Добавлен атрибут класса
View.init_every_request. Если подкласс представления установит его вFalse, представление не будет создавать новый экземпляр при каждом запросе. #2520. - Группа Click
flask.cli.FlaskGroupможет быть вложена как подкоманда в пользовательском CLI. - Добавлены параметры
--appи--debugв CLIflask, вместо необходимости устанавливать их через переменные среды. #2836 - Добавлен параметр
--env-fileв CLIflask. Это позволяет указать файл dotenv для загрузки дополнительно к.envи.flaskenv. #3108 - Больше не требуется декоратор пользовательских команд CLI в
app.cliилиblueprint.cliс@with_appcontext, так как контекст приложения будет активен на этом этапе. #2410 -
SessionInterface.get_expiration_timeиспользует значение с учетом часового пояса. #4645 - Функции представлений могут возвращать генераторы непосредственно, вместо обертки их в
Response. #4629 - Добавлены функции
stream_templateиstream_template_stringдля рендеринга шаблона как потока частей. #4629 -
Новая реализация сохранения контекста во время отладки и тестирования. #4666
-
request,gи другие локальные переменные контекста указывают на правильные данные при выполнении кода в консоли интерактивного отладчика. #2836 - Функции завершения всегда выполняются в конце запроса, даже если контекст сохраняется. Они также выполняются после того, как сохраненный контекст будет извлечен.
-
stream_with_contextсохраняет контекст отдельно от блокаwith client. Он будет очищен при вызовеresponse.get_data()илиresponse.close().
-
- Разрешение возвращать список из функции представления для преобразования его в JSON-ответ, как в случае с dict. #4672
- При проверке типов разрешено возвращать
TypedDictиз функций представлений. #4695 - Удалены параметры
--eager-loading/--lazy-loadingиз командыflask run. Приложение всегда загружается в первый раз, а затем загружается по запросу в процессе перезагрузки. Перезагрузчик всегда сразу печатает ошибки, но продолжает обслуживать. Удален внутренний middlewareDispatchingAppиспользуемый предыдущей реализацией. #4715
Версия 2.1.3
Выпущено 2022-07-13
- Встроенные необязательные импорты, которые используются только для определённых команд CLI. #4606
- Смягчение анотации типа для функций
after_request. #4600 -
instance_pathдля пакетов имен пространств использует путь, наиболее близкий к импортированному подмодулю. #4610 - Более чёткое сообщение об ошибке, когда
render_templateиrender_template_stringиспользуются вне контекста приложения. #4693
Версия 2.1.2
Выпущено 2022-04-28
Версия 2.1.1
Выпущено 2022-03-30
- Установлена минимальная требуемая версия importlib_metadata 3.6.0, которая необходима для Python < 3.10. #4502
Версия 2.1.0
Выпущено 2022-03-28
- Отказ от поддержки Python 3.6. #4335
- Обновление зависимости Click до >= 8.0. #4008
-
Удаление ранее устаревшего кода. #4337
- CLI не передает
script_infoфункциям фабрики приложений. -
config.from_jsonзаменено наconfig.from_file(name, load=json.load). -
jsonфункции больше не принимают параметрencoding. -
safe_joinудалено, используйтеwerkzeug.utils.safe_joinвместо него. -
total_secondsудалено, используйтеtimedelta.total_secondsвместо него. - Один и тот же Blueprint не может быть зарегистрирован с тем же именем. Используйте
name=при регистрации, чтобы указать уникальное имя. - Параметр
as_tupleтестового клиента удален. Используйтеresponse.request.environвместо него. #4417
- CLI не передает
-
Некоторые параметры в
send_fileиsend_from_directoryбыли переименованы в 2.0. Срок устаревания старых имен продлён до 2.2. Убедитесь, что при тестировании включены предупреждения об устаревании.-
attachment_filenameпереименовано вdownload_name. -
cache_timeoutпереименовано вmax_age. -
add_etagsпереименовано вetag. -
filenameпереименовано вpath.
-
- Свойство
RequestContext.gустарело. Используйтеgнапрямую илиAppContext.gвместо него. #3898 -
copy_current_request_contextможет декорировать асинхронные функции. #4303 - CLI использует
importlib.metadataвместоpkg_resourcesдля загрузки точек входа команд. #4419 - Переопределение
FlaskClient.openне вызовет ошибку при перенаправлении. #3396 - Добавлена опция
--exclude-patternsк команде CLIflask runдля указания шаблонов, которые будут проигнорированы перезагрузчиком. #4188 - При использовании ленивой загрузки (по умолчанию с отладчиком) контекст Click из команды
flask runостается доступным в потоке загрузчика. #4460 - Удаление куки сессии использует флаг
httponly. #4485 - Расслабление типизации для
errorhandlerпозволяет пользователю использовать более точные типы и несколько раз декорировать одну и ту же функцию. #4095, 4295, 4297 - Исправление типизации методов
__exit__для лучшей совместимости сExitStack. #4474 - Из Werkzeug, для ответов с перенаправлением URL в заголовке
Locationостаётся относительным по умолчанию и исключает схему и домен. #4496 - Добавлен
Config.from_prefixed_env()для загрузки значений конфигурации из переменных окружения, начинающихся сFLASK_или другого префикса. По умолчанию парсит значения как JSON и позволяет задавать ключи в вложенных словарях. #4479
Версия 2.0.3
Выпущено 2022-02-14
- Параметр
as_tupleтестового клиента устарел и будет удалён в Werkzeug 2.1. Теперь он также устарел в Flask, чтобы быть удалённым в Flask 2.1, оставаясь совместимым с обоими в 2.0.x. Используйтеresponse.request.environвместо него. #4341 - Исправлено аннотация типа для декоратора
errorhandler. #4295 - Отменено изменение в CLI, которое привело к скрытию
ImportErrorстрок отслеживания при импорте приложения. #4307 -
app.json_encoderиjson_decoderпередаются только вdumpsиloads, если они имеют специальное поведение. Это улучшает производительность, в основном на PyPy. #4349 - Более понятное сообщение об ошибке при использовании
after_this_requestвне контекста запроса. #4333
Версия 2.0.2
Выпущено 2021-10-04
- Исправлена аннотация типа для методов
teardown_*. #4093 - Исправлены аннотации типа для декораторов
before_requestиbefore_app_request. #4104 - Исправлена проблема, когда типизация требует, чтобы глобальные декораторы шаблонов принимали функции без аргументов. #4098
- Поддержка экземпляров View и MethodView с асинхронными обработчиками. #4112
- Улучшена типизация декоратора
app.errorhandler. #4095 - Исправлена регистрация Blueprint дважды с разными именами. #4124
- Исправлен тип
static_folderдля приемаpathlib.Path. #4150 -
jsonifyобрабатываетdecimal.Decimal, кодируя вstr. #4157 - Правильная обработка поднятия отложенных ошибок в ленивой загрузке CLI. #4096
- Загрузчик CLI обрабатывает
**kwargsв функцииcreate_app. #4170 - Исправлен порядок
before_requestи других обратных вызовов, которые срабатывают до возврата представления. Они вызываются снизу вверх от приложения к самому внутреннему вложенному blueprint. #4229
Версия 2.0.1
Выпущено 2021-05-21
- Добавлен параметр
filenameвsend_from_directory. Параметрfilenameпереименован вpath, старое имя устарело. #4019 - Отмечены имена верхнего уровня как экспортируемые, чтобы проверка типов понимала импорты в пользовательских проектах. #4024
- Исправлена аннотация типа для
gи сообщено mypy, что это объект пространства имен с произвольными атрибутами. #4020 - Исправлены некоторые типы, которые были недоступны в Python 3.6.0. #4040
- Улучшена типизация для
send_file,send_from_directory, иget_send_file_max_age. #4044, #4026 - Отображение ошибки, когда имя блейнкрипта содержит точку.
.имеет специальное значение, используется для разделения (вложенных) имён блейнкрипта и имени конечной точки. #4041 - Объединение префиксов URL при вложении блейнкритов, созданных со значением
url_prefix. #4037 - Откат изменения порядка выполнения сопоставления URL. URL снова сопоставляется после загрузки сессии, поэтому сессия доступна в пользовательских преобразователях URL. #4053
- Добавлен устаревший параметр
Config.from_json, который был случайно удалён ранее. #4078 - Улучшена типизация некоторых функций, использующих
Callableв своих сигнатурах типов, с фокусом на фабриках декораторов. #4060 - Вложенные блейнкриты регистрируются с их имён с точками. Это позволяет различным блейнкритам с одинаковым именем быть вложенными в разных местах. #4069
-
register_blueprintпринимает опциюnameдля изменения имени блейнкрита (до добавления точек), с которым он зарегистрирован. Это позволяет зарегистрировать один и тот же блейнкрит несколько раз с уникальными именами дляurl_for. Регистрация одного и того же блейнкрита с одинаковым именем несколько раз устарела. #1091 - Улучшена типизация для
stream_with_context. #4052
Версия 2.0.0
Выпущено 2021-05-11
- Отказ от поддержки Python 2 и 3.5.
- Повышение минимальных версий других проектов Pallets: Werkzeug >= 2, Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8. Обязательно ознакомьтесь с журналом изменений каждого проекта. Для лучшей совместимости с другими приложениями (например, Celery), которые всё ещё требуют Click 7, жёсткой зависимости от Click 8 пока нет, но использование Click 7 вызовет DeprecationWarning, а Flask 2.1 будет зависеть от Click 8.
- Поддержка JSON больше не использует simplejson. Чтобы использовать другой модуль JSON, переопределите
app.json_encoderиjson_decoder. #3555 - Опция
encodingдля функций JSON устарела. #3562 - Передача
script_infoв функции фабрики приложения устарела. Это не было переносимым за пределами командыflask. Используйтеclick.get_current_context().objесли это необходимо. #3552 - Интерфейс командной строки отображает более информативные сообщения об ошибках, когда приложение не загрузилось при поиске команд. #2741
- Добавлен
SessionInterface.get_cookie_nameдля динамического изменения имени cookie сессии. #3369 - Добавлен
Config.from_fileдля загрузки конфигурации с использованием произвольных загрузчиков файлов, таких какtoml.loadилиjson.load.Config.from_jsonустарело в пользу этого. #3398 - Команда
flask runбудет откладывать ошибки только при перезагрузке. Ошибки, присутствующие во время первоначального вызова, приведут к немедленному завершению сервера с отслеживанием ошибок. #3431 -
send_fileвызываетValueErrorпри передаче объектаioв текстовом режиме. Раньше он отвечал 200 OK и пустым файлом. #3358 - При использовании самодельных сертификатов проверяется библиотека cryptography вместо PyOpenSSL. #3492
- При указании функции фабрики с
FLASK_APP, можно передать именованные аргументы. #3553 - При загрузке файла
.envили.flaskenv, текущая рабочая директория больше не изменяется на расположение файла. #3560 - При возвращении кортежа
(response, headers)из представления, заголовки заменяют, а не расширяют существующие заголовки ответа. Например, это позволяет установитьContent-Typeдляjsonify(). Используйтеresponse.headers.extend()если требуется расширение. #3628 - Класс
Scaffoldпредоставляет общий API для классовFlaskиBlueprint. ИнформацияBlueprintхранится в атрибутах так же, как иFlask, а не в неявных лямбда-функциях. Это направлено на повышение согласованности и поддерживаемости. #3215 - Включить
samesiteиsecureопции при удалении cookie сессии. #3726 - Поддержка передачи
pathlib.Pathвstatic_folder. #3579 -
send_fileиsend_from_directoryявляются обёртками над реализациями вwerkzeug.utils. #3828 - Некоторые параметры
send_fileбыли переименованы, старые имена устарели.attachment_filenameпереименован вdownload_name.cache_timeoutпереименован вmax_age.add_etagsпереименован вetag. #3828, 3883 -
send_fileпередаетdownload_nameдаже еслиas_attachment=FalseиспользуяContent-Disposition: inline. #3828 -
send_fileустанавливаетconditional=Trueиmax_age=Noneпо умолчанию.Cache-Controlустанавливается вno-cacheеслиmax_ageне установлено, иначеpublic. Это сообщает браузерам проверять условные запросы вместо использования кэширования с таймерами. #3828 -
helpers.safe_joinустарело. Используйтеwerkzeug.utils.safe_joinвместо него. #3828 - Контекст запроса выполняет сопоставление маршрутов перед открытием сессии. Это может позволить интерфейсу сессии изменять поведение на основе
request.endpoint. #3776 - Используйте реализацию Jinja фильтра
|tojson. #3881 - Добавлены декораторы маршрутов для общих HTTP-методов. Например,
@app.post("/login")является сокращением для@app.route("/login", methods=["POST"]). #3907 - Поддержка асинхронных представлений, обработчиков ошибок, до и после запроса, и функций завершения. #3412
- Поддержка вложения блейнкритов. #593, 1548, #3923
- Установите кодировку по умолчанию в «UTF-8» при загрузке
.envи.flaskenvфайлов, чтобы разрешить использование символов не ASCII. #3931 -
flask shellнастраивает табуляцию и автодополнение истории, как в стандартной оболочкеpythonеслиreadlineустановлен. #3941 -
helpers.total_seconds()устарело. Используйтеtimedelta.total_seconds()вместо него. #3962 - Добавлены подсказки типов. #3973.
Версия 1.1.4
Выпущено 2021-05-13
- Обновлен
static_folderдля использования_compat.fspathвместоos.fspathдля продолжения поддержки Python < 3.6 #4050
Версия 1.1.3
Выпущено 2021-05-13
Версия 1.1.2
Выпущено 2020-04-03
Версия 1.1.1
Выпущено 2019-07-08
- Флаг
flask.json_availableбыл добавлен обратно для совместимости с некоторыми расширениями. При использовании он будет вызывать предупреждение о устаревании и будет удален в версии 2.0.0. #3288
Версия 1.1.0
Выпущено 2019-07-04
- Повышен минимальный уровень версии Werkzeug до >= 0.15.
- Отобрана поддержка Python 3.4.
-
Обработчики ошибок для
InternalServerErrorили500всегда будут получать экземплярInternalServerError. Если они вызваны из-за необработанного исключения, то исходное исключение теперь доступно какe.original_exception, а не передаётся непосредственно обработчику. То же самое относится к обработчику базовогоHTTPException. Это делает поведение обработчиков ошибок более согласованным. #3266Flask.finalize_requestвызывается для всех необработанных исключений, даже если нет обработчика ошибок500.
-
Flask.loggerимеет то же имя, что иFlask.name(значение, переданное какFlask(import_name)). Это возвращает поведение 1.0, когда логирование всегда происходит в"flask.app", чтобы поддерживать несколько приложений в одном процессе. Если будет обнаружено старое конфигурирование, которое нужно перенести, будет показано предупреждение. #2866 -
RequestContext.copyвключает текущий объект сессии в копию контекста запроса. Это предотвращает ситуацию, когдаsessionуказывает на устаревший объект. #2935 - Используя встроенный RequestContext, непечатаемые символы Unicode в заголовке Host приведут к ответу HTTP 400, а не HTTP 500, как было раньше. #2994
-
send_fileподдерживает объектыPathLike, как описано в PEP 519, чтобы поддерживатьpathlibв Python 3. #3059 -
send_fileподдерживаетBytesIOчастичное содержимое. #2957 -
open_resourceпринимает режим файла “rt”. Это всё ещё делает то же самое, что и “r”. #3163 - Атрибут
MethodView.methodsв базовом классе используется подклассами. #3138 -
Flask.jinja_optionsявляетсяdictвместоImmutableDict, чтобы упростить настройку. Изменения всё равно необходимо вносить до создания среды. #3190 - Обёртки запроса и ответа
JSONMixinFlask были перемещены в Werkzeug. Используйте версию Werkzeug с поддержкой Flask. Это увеличивает зависимость от Werkzeug до >= 0.15. #3125 - Точка входа команды
flaskупрощена, чтобы использовать улучшенную поддержку перезагрузчика Werkzeug 0.15. Это увеличивает зависимость от Werkzeug до >= 0.15. #3022 - Поддержка
static_url_path, заканчивающегося слешем. #3134 - Поддержка пустого
static_folderбез необходимости устанавливать пустоеstatic_url_path. #3124 -
jsonifyподдерживает объектыdataclass. #3195 - Возможность настраивать
Flask.url_map_classдля маршрутизации. #3069 - Порт сервера разработки может быть установлен в 0, что сообщает ОС о выборе доступного порта. #2926
- Возвращаемое значение из
cli.load_dotenvсогласуется с документацией. Оно вернётFalse, если python-dotenv не установлен или указанный путь не является файлом. #2937 - Поддержка сигнализации имеет заглушку для метода
connect_viaкогда библиотека Blinker не установлена. #3208 - Добавлен параметр
--extra-filesк командеflask runCLI для указания дополнительных файлов, которые будут запускать перезагрузчик при изменении. #2897 - Разрешение возврата словаря из функции представления. Так же как возврат строки создаёт ответ
text/html, возврат словаря вызоветjsonifyдля создания ответаapplication/json. #3111 - Планы имеют группу
cliClick, подобнуюapp.cli. Команды CLI, зарегистрированные с планом, будут доступны как группа под командойflask. #1357. - При использовании тестового клиента как контекстного менеджера (
with client:), все сохранённые контексты запросов удаляются при выходе из блока, гарантируя правильную очистку вложенных контекстов. #3157 - Вывод более подходящего сообщения об ошибке, если тип возвращаемого значения представления не поддерживается. #3214
flask.testing.make_test_environ_builder()устарел в пользу нового классаflask.testing.EnvironBuilder. #3232- Команда
flask runбольше не завершается ошибкой, если Python не скомпилирован с поддержкой SSL. Использование параметра--certотобразит соответствующее сообщение об ошибке. #3211 - Сопоставление URL теперь происходит после помещения контекста запроса, а не при его создании. Это позволяет пользовательским преобразователям URL получить доступ к контекстам приложения и запроса, например, для запроса данных из базы данных по идентификатору. #3088
Версия 1.0.4
Выпущено 2019-07-04
- Ключевая информация для
BadRequestKeyErrorбольше не очищается вне режима отладки, поэтому обработчики ошибок всё ещё могут к ней получить доступ. Для этого требуется обновление до Werkzeug 0.15.5. #3249 -
send_fileэкранирует символы “:” и “/” для большей совместимости с UTF-8 именами файлов в некоторых браузерах. #3074 - Исправления для PEP 451 импортёров и pytest 5.x. #3275
- Вывод сообщения о dotenv в stderr вместо stdout. #3285
Версия 1.0.3
Выпущено 2019-05-17
-
send_fileкодирует имена файлов как ASCII вместо Latin-1 (ISO-8859-1). Это исправляет совместимость с Gunicorn, который более жёстко относится к кодировкам заголовков, чем PEP 3333. #2766 - Разрешение пользовательских CLIs, использующих
FlaskGroup, для установки флага отладки без его перезаписи на основе переменных среды. #2765 -
flask --versionвыводит версию Werkzeug и упрощает вывод версии Python. #2825 -
send_fileобрабатываетattachment_filename, который является строкой Python 2 (байтами) с кодировкой UTF-8. #2933 - Обработчик ошибок по умолчанию, зарегистрированный для
HTTPException, не обрабатываетRoutingException, который используется внутренне при маршрутизации. Это исправляет неожиданное поведение, появившееся в версии 1.0. #2986 - Передача аргумента
jsonкapp.test_clientне помещает/удаляет дополнительный контекст приложения. #2900
Версия 1.0.2
Выпущено 2018-05-02
Версия 1.0.1
Выпущено 2018-04-29
- Исправлена регистрация частичных (без
__name__) как функций представлений. #2730 - Списки, возвращаемые функциями представлений, больше не обрабатываются так же, как кортежи. Только кортежи интерпретируются как данные ответа. #2736
- Дополнительные слеши между префиксом шаблона и URL маршрута объединяются. Это исправляет некоторые проблемы обратной совместимости с изменениями в версии 1.0. #2731, #2742
- Логируются только ошибки
BadRequestKeyErrorв отладочном режиме, а не все ошибкиBadRequest. Это позволяетabort(400)продолжить работу как ожидается. #2735 - Переменная среды
FLASK_SKIP_DOTENVможет быть установлена в1, чтобы пропустить автоматическую загрузку файлов dotenv. #2722
Версия 1.0
Выпущено 2018-04-26
- Python 2.6 и 3.3 больше не поддерживаются.
- Увеличены минимальные версии зависимостей до последних стабильных версий: Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. #2586
- Пропуск
app.runпри запуске приложения Flask из командной строки. Это позволяет избежать некоторого поведения, которое было сложно отлаживать. - Изменено значение по умолчанию для
JSONIFY_PRETTYPRINT_REGULARнаFalse.~json.jsonifyпо умолчанию возвращает компактный формат, а в отладочном режиме — отформатированный с отступами. #2193 -
Flask.__init__принимает аргументhost_matchingи устанавливает его наFlask.url_map. #1559 -
Flask.__init__принимает аргументstatic_hostи передает его как аргументhostпри определении статического маршрута. #1559 -
send_fileподдерживает Unicode вattachment_filename. #2223 - Передача аргумента
_schemeизurl_forвFlask.handle_url_build_error. #2017 -
Flask.add_url_ruleпринимает аргументprovide_automatic_optionsдля отключения добавления методаOPTIONS. #1489 -
MethodViewподклассы наследуют обработчики методов от базовых классов. #1936 - Ошибки, возникшие при открытии сессии в начале запроса, обрабатываются обработчиками ошибок приложения. #2254
- В Blueprints появились атрибуты
Blueprint.json_encoderиBlueprint.json_decoderдля переопределения кодировщика и декодера приложения. #1898 -
Flask.make_responseвыдаетTypeErrorвместоValueErrorдля неправильных типов ответов. Сообщения об ошибках были улучшены, чтобы описать, почему тип недействителен. #2256 - Добавлен командный интерфейс
routesдля вывода зарегистрированных маршрутов приложения. #2259 - Выводится предупреждение, если домен cookie сессии — это просто имя хоста или IP-адрес, так как в некоторых браузерах (например, Chrome) это может работать некорректно.
- Разрешение IP-адреса как точного домена cookie сессии. #2282
-
SESSION_COOKIE_DOMAINустанавливается, если он обнаруживается черезSERVER_NAME. #2282 - Автоматическое распознавание фабрики приложения без аргументов, названной
create_appилиmake_appизFLASK_APP. #2297 - Функции-фабрики не обязаны принимать параметр
script_infoдля работы с командойflask. Если они принимают один параметр или параметр с именемscript_info, будет передан объектScriptInfo. #2319 -
FLASK_APPможет быть установлено на фабрику приложения с аргументами, если это необходимо, напримерFLASK_APP=myproject.app:create_app('dev'). #2326 -
FLASK_APPможет указывать на локальные пакеты, которые не установлены в режиме редактирования, хотяpip install -eпо-прежнему предпочтительнее. #2414 - Атрибут класса
ViewView.provide_automatic_optionsустанавливается вView.as_view, чтобы быть обнаруженнымFlask.add_url_rule. #2316 - Обработка ошибок будет пытаться использовать обработчики, зарегистрированные для
blueprint, code,app, code,blueprint, exception,app, exception. #2314 -
Cookieдобавляется в заголовок ответаVary, если к сессии был обращение в ходе запроса (и она не удалялась). #2288 -
Flask.test_request_contextпринимает аргументыsubdomainиurl_schemeдля использования при построении базового URL. #1621 - Значение
APPLICATION_ROOTпо умолчанию установлено на'/'. Это уже являлось неявным значением по умолчанию при установке наNone. -
TRAP_BAD_REQUEST_ERRORSвключено по умолчанию в отладочном режиме.BadRequestKeyErrorсодержит сообщение с неправильным ключом в отладочном режиме вместо общего сообщения о неправильном запросе. #2348 - Разрешение регистрации новых тегов с
TaggedJSONSerializerдля поддержки хранения других типов в cookie сессии. #2352 - Сессия открывается только если запрос еще не добавлен в стек контекста. Это позволяет
stream_with_contextгенераторам получить доступ к той же сессии, что и содержащая view. #2354 - Добавлен аргумент
jsonдля методов запроса клиента для тестирования. Это позволит вывести заданный объект в формате JSON и установить соответствующий тип контента. - Обработка JSON вынесена в миксин, применяемый к классам
RequestиResponse. Это добавляет методыResponse.is_jsonиResponse.get_jsonв ответ, что значительно упрощает тестирование JSON-ответов. #2358 - Удалено кеширование обработчиков ошибок, т.к. это приводило к непредвиденным результатам для некоторых иерархий наследования исключений. Явно регистрируйте обработчики для каждого исключения, если хотите избежать обхода MRO.
- Исправлено некорректное кодирование JSON для осознанных, не UTC-временных меток.
- Автоперезагрузка шаблонов будет учитывать отладочный режим даже если
Flask.jinja_envуже был вызван. -
Удалён следующий устаревший код. #2385
-
flask.ext— импорт расширений напрямую по их имени, а не через пространство имёнflask.ext. Например,import flask.ext.sqlalchemyстановитсяimport flask_sqlalchemy. -
Flask.init_jinja_globals— расширяйтеFlask.create_jinja_environment. -
Flask.error_handlers— отслеживаетсяFlask.error_handler_spec, используйтеFlask.errorhandlerдля регистрации обработчиков. -
Flask.request_globals_class— используйтеFlask.app_ctx_globals_classвместо него. -
Flask.static_path— используйтеFlask.static_url_pathвместо него. -
Request.module— используйтеRequest.blueprintвместо него.
-
- Свойство
Request.jsonбольше не устарело. #1421 - Поддержка передачи
EnvironBuilderилиdictвtest_client.open. #2412 - Команда
flaskиFlask.runбудут загружать переменные среды из файлов.envи.flaskenvесли установлен python-dotenv. #2416 - При передаче полного URL клиенту для тестирования используется схема из URL вместо
PREFERRED_URL_SCHEME. #2430 -
Flask.loggerбыл упрощен.LOGGER_NAMEиLOGGER_HANDLER_POLICYконфигурация была удалена. Логгер всегда называетсяflask.app. Уровень устанавливается только при первом доступе, он не проверяетFlask.debugкаждый раз. Используется только один формат, а не разные в зависимости отFlask.debug. Обработчики не удаляются, и обработчик добавляется только если обработчиков еще нет. #2436 - Имена функций представления Blueprint не должны содержать точки. #2450
- Исправлена ошибка
ValueErrorвызванная некорректными запросамиRangeв некоторых случаях. #2526 - Сервер разработки по умолчанию использует потоки.
- Загрузка файлов конфигурации с
silent=Trueигнорирует ошибкиENOTDIR. #2581 - Передайте параметры
--certи--keyвflask runдля запуска сервера разработки через HTTPS. #2606 - Добавлен
SESSION_COOKIE_SAMESITEдля управления атрибутомSameSiteв cookie сессии. #2607
- Добавлен
Flask.test_cli_runnerдля создания Click runner, который может вызывать команды Flask CLI для тестирования. #2636 - Сопоставление по доменным именам по умолчанию отключено, и установка
SERVER_NAMEне включает его неявно. Его можно включить, передавsubdomain_matching=TrueконструкторуFlask. #2635 - Из бланка
url_prefixпри регистрации его в приложении удаляется одиночный конечный слэш. #2629 -
Request.get_jsonне кеширует результат, если при разборе произошла ошибка, когдаsilentравно true. #2651 -
Request.get_jsonбольше не принимает произвольные кодировки. Входящий JSON должен быть закодирован с помощью UTF-8 в соответствии с RFC 8259, но Flask будет автоматически определять UTF-8, -16 или -32. #2691 - Добавлены
MAX_COOKIE_SIZEиResponse.max_cookie_sizeдля управления моментами, когда Werkzeug предупреждает о больших куки, которые браузеры могут игнорировать. #2693 - Тема документации обновлена, чтобы документы выглядели лучше в небольших окнах. #2709
- Документы учебника и примерный проект переписаны, чтобы помочь новым пользователям избежать распространенных ошибок, используя более структурированный подход. #2676
Версия 0.12.5
Выпущено 2020-02-10
- Закрепить Werkzeug до < 1.0.0. #3497
Версия 0.12.4
Выпущено 2018-04-29
- Переупаковать 0.12.3 для исправления проблемы с расположением пакетов. #2728
Версия 0.12.3
Выпущено 2018-04-26
-
Request.get_jsonбольше не принимает произвольные кодировки. Входящий JSON должен быть закодирован с помощью UTF-8 в соответствии с RFC 8259, но Flask будет автоматически определять UTF-8, -16 или -32. #2692 - Исправлена ошибка Python с предупреждением об импортах при использовании
python -m flask. #2666 - Исправлена ошибка
ValueErrorвызванная некорректнымиRangeзапросами в некоторых случаях.
Версия 0.12.2
Выпущено 2017-05-16
- Исправлена ошибка в
safe_joinв Windows.
Версия 0.12.1
Выпущено 2017-03-31
- Предотвращена ситуация, когда
flask runотображаетNoAppExceptionпри возникновенииImportErrorв импортированном модуле приложения. - Исправлено поведение кодирования
app.config.from_pyfileдля Python 3. #2118 - Используйте конфигурацию
SERVER_NAMEесли она присутствует, как значения по умолчанию дляapp.run. #2109, #2152 - Вызовите
ctx.auto_popс объектом исключения вместоNone, в случае возникновения исключения, такого какBaseExceptionтипаKeyboardInterruptв обработчике запроса.
Версия 0.12
Выпущено 2016-12-21, кодовое имя Punsch
- Команда cli теперь отвечает на
--version. - Угадывание MIME-типов и генерация ETag для объектов типа file-like в
send_fileбыло удалено. #104, :pr`1849` - Угадывание MIME-типов в
send_fileтеперь завершается ошибкой и не используетapplication/octet-stream. #1988 - Разрешить
flask.safe_joinобъединять несколько путей, какos.path.join#1730 - Отменить изменение поведения, которое привело к ошибке dev сервера вместо возвращения ошибки Internal Server Error. #2006
- Правильно вызывать обработчики ответов как для обычного маршрутизирования запросов, так и для обработчиков ошибок.
- По умолчанию отключать распространение логгера для логгера приложения.
- Добавить поддержку запросов диапазона в
send_file. -
app.test_clientвключает предопределённую среду по умолчанию, которую теперь можно непосредственно установить, вместо настроек поclient.get. - Исправить ошибку при работе под PyPy3. #1814
Версия 0.11.1
Выпущено 2016-06-07
- Исправлена ошибка, которая мешала работе
FLASK_APP=foobar/__init__.py. #1872
Версия 0.11
Выпущено 2016-05-29, кодовое имя Absinthe
- Добавлена поддержка сериализации массивов верхнего уровня в
jsonify. Это вводит риск безопасности в старых браузерах. - Добавлен сигнал before_render_template.
- Добавлен
**kwargsвFlask.test_clientдля поддержки передачи дополнительных ключевых аргументов в конструкторFlask.test_client_class. - Добавлен ключ конфигурации
SESSION_REFRESH_EACH_REQUEST, который управляет поведением set-cookie. Если установлен вTrue, постоянная сессия будет обновляться при каждом запросе и срок ее действия будет продлен, если установлен вFalse, она будет изменена только если сессия фактически изменилась. На непостоянные сессии это не влияет, и они всегда истекают при закрытии окна браузера. - Добавлена поддержка Flask для пользовательских MIME-типов JSON для входящих данных.
- Добавлена поддержка возвращения кортежей в форме
(response, headers)из функции представления. - Добавлен
Config.from_json. - Добавлен
Flask.config_class. - Добавлен
Config.get_namespace. - Шаблоны больше не перезагружаются автоматически вне режима отладки. Это можно настроить с помощью нового ключа конфигурации
TEMPLATES_AUTO_RELOAD. - Добавлена обходная проблема для ограничения в загрузчике пространства имен Python 3.3.
- Добавлена поддержка явных корневых путей при использовании пакетов пространства имен Python 3.3.
- Добавлены
flaskи модульflask.cliдля запуска локального сервера отладки через систему командной строки click. Это рекомендуется вместо старого методаflask.run(), так как он работает быстрее и надежнее благодаря другой архитектуре, а также заменяетFlask-Script. - Обработчики ошибок, соответствующие конкретным классам, теперь проверяются в первую очередь, что позволяет перехватывать исключения, являющиеся подклассами исключений HTTP (в
werkzeug.exceptions). Это позволяет автору расширения создавать исключения, которые по умолчанию приведут к ошибке HTTP по их выбору, но могут быть перехвачены пользовательским обработчиком ошибок при необходимости. - Добавлен
Config.from_mapping. - Flask теперь будет вести журнал по умолчанию, даже если отладка отключена. Формат журнала теперь жестко задан, но обработку журнала по умолчанию можно отключить с помощью ключа конфигурации
LOGGER_HANDLER_POLICY. - Удалена устаревшая функциональность модуля.
- Добавлен флаг конфигурации
EXPLAIN_TEMPLATE_LOADING, который, если включен, будет инструктировать Flask объяснить, как он находит шаблоны. Это должно помочь пользователям отлаживать, когда загружаются неправильные шаблоны. - Обработка модулей bluepring теперь выполняется в порядке их регистрации для загрузки шаблонов.
- Тестовый набор перенесен на py.test.
- Устарел
request.jsonв пользуrequest.get_json(). - Добавлены определения разделителей «pretty» и «compressed» в методе jsonify(). Уменьшает размер ответа JSON при
JSONIFY_PRETTYPRINT_REGULAR=Falseпутем удаления ненужных пробелов, включенных по умолчанию после разделителей. - Ответы JSON теперь завершаются символом новой строки, потому что это соглашение, что текстовые файлы UNIX заканчиваются новой строкой, и некоторые клиенты некорректно обрабатывают, когда этой новой строки нет. #1262
- Автоматически предоставляемый метод
OPTIONSтеперь правильно отключен, если пользователь зарегистрировал переопределяющее правило с версией с маленькой буквыoptions. #1288 -
flask.json.jsonifyтеперь поддерживает типdatetime.date. #1326 - Не пропускайте информацию об исключении уже перехваченных исключений в обработчики завершения контекста. #1393
- Разрешить пользовательские подклассы окружения Jinja. #1422
- Обновлены руководства по разработке расширений.
-
flask.gтеперь имеет методыpop()иsetdefault. - Включить автоматическое экранирование для
flask.templating.render_template_stringпо умолчанию. #1515 -
flask.extтеперь устарел. #1484 -
send_from_directoryтеперь поднимает BadRequest, если имя файла недействительно в ОС сервера. #1763 - Добавлена переменная конфигурации
JSONIFY_MIMETYPE. #1728 - Исключения во время обработки завершения больше не оставляют плохих контекстов приложения.
- Исправлен неработающий тестовый случай
test_appcontext_signals(). - Поднимите
AttributeErrorвhelpers.find_packageс полезным сообщением, объясняющим, почему он поднят, когда используется импортер PEP 302 без методаis_package(). - Исправлена проблема, из-за которой исключения, поднятые до входа в контекст запроса или приложения, передавались обработчикам завершения.
- Исправлена проблема с удалением параметров запроса из запросов в клиенте теста при запросе абсолютных URL-адресов.
- Сделайте
@before_first_requestдекоратором, как и предполагалось. - Исправлена ошибка etags при отправке потоков файлов с именем.
- Исправлено, что
send_from_directoryне расширялся до корневого пути приложения правильно. - Изменена логика обработчиков перед первым запросом для переключения флага после вызова. Это позволит некоторым потенциально опасным, но, вероятно, допустимым использованиям.
- Исправлена ошибка Python 3, когда обработчик из
app.url_build_error_handlersповторно поднималBuildError.
Версия 0.10.1
Выпущено 2013-06-14
- Исправлена проблема, из-за которой
|tojsonне цитировал одинарные кавычки, что делало фильтр некорректно работающим в атрибутах HTML. Теперь можно использовать этот фильтр в атрибутах с одинарными кавычками. Это должно упростить использование этого фильтра с angular.js. - Добавлена поддержка байтовых строк обратно в систему сессий. Это нарушило совместимость с общим случаем, когда люди помещали двоичные данные для проверки токенов в сессию.
- Исправлена проблема, из-за которой регистрация одного и того же метода дважды для одного и того же конечной точки неверно вызывала исключение.
Версия 0.10
Выпущено 2013-06-13, кодовое имя Limoncello
- Изменён формат сериализации файлов cookie по умолчанию с pickle на JSON для ограничения последствий, которые может произвести злоумышленник, если секретный ключ утечет.
- Добавлены методы
template_testв дополнение к уже существующей группе методовtemplate_filter. - Добавлены методы
template_globalв дополнение к уже существующей группе методовtemplate_filter. - Установлен заголовок content-length для x-sendfile.
-
tojsonфильтр больше не экранирует блоки скриптов в парсерах HTML5. -
tojsonв шаблонах теперь безопасны по умолчанию. Это было разрешено из-за разного поведения экранирования. - Flask теперь выводит ошибку, если вы пытаетесь зарегистрировать новую функцию на уже используемой конечной точке.
- Добавлен модуль-обёртку вокруг simplejson и добавлена по умолчанию сериализация объектов datetime. Это позволяет гораздо легче настраивать обработку JSON Flask или любым расширением Flask.
- Удален устаревший внутренний псевдоним модуля
flask.session. Используйтеflask.sessionsвместо него, чтобы получить модуль сессии. Это не следует путать сflask.session, прокси сессии. - Шаблоны теперь могут отображаться без контекста запроса. Поведение немного отличается, так как объекты
request,sessionиgнедоступны и контекстные процессоры модулей bluepring не вызываются. - Объект конфигурации теперь доступен шаблону как настоящий глобальный, а не через контекстный процессор, что делает его доступным даже в импортированных шаблонах по умолчанию.
- Добавлена возможность генерировать JSON с кодировкой не-ASCII, что должно привести к передаче меньшего количества байтов по сети. По умолчанию она отключена, чтобы не вводить путаницы в существующие библиотеки, которые могут ожидать, что
flask.json.dumpsвернёт байты по умолчанию. -
flask.gтеперь хранится в контексте приложения, а не в контексте запроса. -
flask.gтеперь получил методget()для того, чтобы не выдавать ошибки при запросе несуществующих элементов. -
flask.gтеперь можно использовать с операторомinдля проверки того, что определено, и теперь он итерируемый и будет выдавать все сохранённые атрибуты. -
flask.Flask.request_globals_classбыл переименован вflask.Flask.app_ctx_globals_class, что лучше отражает его функцию с версии 0.10. -
request,sessionиgтакже были добавлены в качестве прокси в контекст шаблона, что делает их доступными в импортированных шаблонах. Однако следует быть очень осторожным с их использованием, так как использование вне макросов может вызвать кэширование. - Flask больше не будет вызывать неправильные обработчики ошибок, если исключение-прокси передаётся через.
- Добавлена обходная проблема для работы кукисов Chrome в localhost, как и предполагается, с именами доменов.
- Изменена логика выбора значений по умолчанию для значений cookie из сессий для лучшей работы с Google Chrome.
- Добавлен сигнал
message_flashedдля упрощения тестирования флэшей. - Добавлена поддержка копирования контекстов запросов для лучшей работы с greenlets.
- Удалены пользовательские подклассы исключений HTTP JSON. Если вы полагались на них, вы можете легко их снова добавить. Однако использование их настоятельно не рекомендуется, так как интерфейс был несовершенен.
- Изменены требования к Python: теперь требуется Python 2.6 или 2.7 в подготовке к портированию в Python 3.3.
- Изменено, как система завершения уведомляется об исключениях. Теперь это более надежно в случае, если что-то обрабатывает исключение в середине процесса обработки ошибок.
- Сохранение контекста запроса в режиме отладки теперь сохраняет информацию об исключении, что позволяет обработчикам завершения отличать случаи ошибок от успешных.
- Добавлена переменная конфигурации
JSONIFY_PRETTYPRINT_REGULAR. - Flask теперь сортирует ключи JSON по умолчанию, чтобы не сломать кэши HTTP из-за разных семян хеширования между разными рабочими процессами.
- Добавлены сигналы
appcontext_pushedиappcontext_popped. - Встроенный метод run теперь учитывает
SERVER_NAMEпри выборе порта по умолчанию для запуска. - Добавлен
flask.request.get_json()в качестве замены старой свойстваflask.request.json.
Версия 0.9
Выпущено 2012-07-01, кодовое имя Campari
- Теперь
Request.on_json_loading_failedпо умолчанию возвращает ответ в формате JSON. - Функция
url_forтеперь может генерировать якоря для сгенерированных ссылок. - Функция
url_forтеперь также может явно генерировать правила URL, специфичные для определенного HTTP-метода. - Журнал теперь возвращает только значение настройки отладки, если оно не было явно задано.
- Отменить циклическую зависимость между окружением WSGI и объектом запроса при завершении запроса. Это означает, что environ
werkzeug.requestбудетNoneпосле того, как ответ был возвращен серверу WSGI, но имеет преимущество, что сборщик мусора не нужен в CPython для разборки запроса, если пользователь не создал циклических зависимостей. - Сессия теперь сохраняется после обратных вызовов, так что если данные сессии хранятся в сессии, вы все равно можете изменить их в обратном вызове после запроса.
- Класс
Flaskбудет избегать импорта предоставленного имени импорта, если сможет (необходимый первый параметр), чтобы помочь инструментам, которые программно создают экземпляры Flask. Класс Flask вернётся к использованию импорта на системах с пользовательскими хуками модулей, например, Google App Engine, или когда имя импорта находится внутри zip-архива (обычно egg) до Python 2.7. - У Blueprints теперь есть декоратор для добавления пользовательских фильтров шаблонов для всего приложения,
Blueprint.app_template_filter. - Классы Flask и Blueprint теперь имеют метод, не являющийся декоратором, для добавления пользовательских фильтров шаблонов для всего приложения,
Flask.add_template_filterиFlask.add_template_filter. - Функция
get_flashed_messagesтеперь позволяет рендерить категории сообщений, отображаемых всплывающими сообщениями, в отдельных блоках, через аргументcategory_filter. - Метод
Flask.runтеперь принимаетNoneдля аргументовhostиport, используя значения по умолчанию, когдаNone. Это позволяет вызывать run с использованием значений конфигурации, например,app.run(app.config.get('MYHOST'), app.config.get('MYPORT')), с правильным поведением, есть ли файл конфигурации или нет. - Метод
render_templateтеперь принимает либо итерируемый список имен шаблонов, либо одно имя шаблона. Ранее он принимал только одно имя шаблона. В случае итерируемого списка, рендерится первый найденный шаблон. - Добавлен
Flask.app_context, который работает очень похоже на контекст запроса, но предоставляет доступ только к текущему приложению. Это также добавляет поддержку генерации URL без активного контекста запроса. - Функции представления теперь могут возвращать кортеж, где первым элементом является экземпляр
Response. Это позволяет возвращатьjsonify(error="error msg"), 400из функции представления. -
FlaskиBlueprintтеперь предоставляют хукget_send_file_max_ageдля подклассов, чтобы переопределять поведение при предоставлении статических файлов из Flask при использованииFlask.send_static_file(используется для обработчика статических файлов по умолчанию) иhelpers.send_file. Этот хук получает имя файла, что, например, позволяет изменять контроллеры кеша по расширению файла. Максимальный срок действия по умолчанию дляsend_fileи статических файлов может быть настроен через новую переменную конфигурацииSEND_FILE_MAX_AGE_DEFAULT, которая используется в реализацииget_send_file_max_ageпо умолчанию. - Исправлена ошибка в реализации сессий, которая могла нарушить отображение всплывающих сообщений в реализациях сессий, использующих внешнее хранилище.
- Изменено поведение значений кортежей, возвращаемых функциями. Они больше не являются аргументами объекта ответа, а теперь имеют определённое значение.
- Добавлен
Flask.request_globals_classдля использования конкретного класса при создании экземпляраgкаждого запроса. - Добавлен атрибут
required_methodsфункциям представления для принудительного добавления методов при регистрации. - Добавлен
flask.after_this_request. - Добавлены
flask.stream_with_contextи возможность многократного применения контекстов без создания неожиданного поведения.
Версия 0.8.1
Выпущено 2012-07-01
- Исправлена проблема с недокументированным модулем
flask.session, который не работал должным образом на Python 2.5. Его не следует использовать, но он вызвал некоторые проблемы для менеджеров пакетов.
Версия 0.8
Выпущено 2011-09-29, кодовое имя Rakija
- Рефакторинг поддержки сессий в интерфейс сессий, чтобы реализацию сессий можно было изменить, не переопределяя класс Flask.
- Теперь пустые куки сессии правильно удаляются автоматически.
- Функции представления теперь могут отказаться от автоматической реализации OPTIONS.
- Теперь можно перехватывать HTTP-исключения и ошибки Bad Request, чтобы они нормально отображались в трассировке.
- Flask в режиме отладки теперь обнаруживает некоторые распространённые проблемы и пытается предупредить вас о них.
- Flask в режиме отладки теперь будет жаловаться с ошибкой утверждения, если представление было подключено после обработки первого запроса. Это даёт более раннюю обратную связь, когда пользователи забывают импортировать код представления заранее.
- Добавлена возможность регистрации обратных вызовов, которые срабатывают только один раз в начале первого запроса с помощью
Flask.before_first_request. - Некорректные данные JSON теперь вызывают исключение HTTP Bad Request вместо ошибки значения, которая обычно приводила к ошибке 500 Internal Server Error, если не обрабатывалась. Это изменение несовместимо со старыми версиями.
- Теперь приложения имеют не только корневой путь, где расположены ресурсы и модули, но и путь экземпляра, который является назначенным местом для файлов, которые модифицируются во время выполнения (загрузки и т.д.). Также это зависит только от экземпляра и находится вне контроля версий, поэтому это идеальное место для размещения файлов конфигурации и т.д.
- Добавлена переменная конфигурации
APPLICATION_ROOT. - Реализация
TestClient.session_transactionдля лёгкого изменения сессий из тестовой среды. - Рефакторинг внутреннего тестового клиента. Переменная конфигурации
APPLICATION_ROOTиSERVER_NAMEтеперь правильно используются тестовым клиентом в качестве значений по умолчанию. - Добавлен
View.decoratorsдля более простой декорации подключаемых представлений (на основе класса). - Исправлена проблема, когда тестовый клиент при использовании с оператором «with» не вызывал обработчики завершения.
- Добавлен более тонкий контроль параметров куки сессии.
- HEAD-запросы к представлению метода теперь автоматически перенаправляются к методу
get, если обработчик не реализован. - Реализован виртуальный пакет
flask.extдля импорта расширений. - Сохранение контекста при исключениях теперь является неотъемлемой частью Flask, а не тестового клиента. Это упрощает внутреннюю логику и снижает вероятность непрерывных контекстов запросов в тестах.
- Исправлен метод
list_templatesсреды Jinja2, который не возвращал правильные имена при использовании blueprints или модулей.
Версия 0.7.2
Выпущено 2011-07-06
- Исправлена проблема с обработчиками URL, которые не работали должным образом в blueprints.
Версия 0.7.1
Выпущено 2011-06-29
- Добавлен отсутствующий импорт future, который нарушал совместимость с 2.5.
- Исправлена проблема бесконечного перенаправления с blueprints.
Версия 0.7
Выпущено 2011-06-28, кодовое имя Grappa
- Добавлен
Flask.make_default_options_response, который может использоваться подклассами для изменения стандартного поведения для ответовOPTIONS. - Несвязанные локальные переменные теперь генерируют правильное исключение
RuntimeErrorвместоAttributeError. - Угадывание MIME-типов и поддержка ETag на основе объектов файлов теперь устарела для
send_fileиз-за ненадежности. Используйте имена файлов вместо них или прикрепляйте свои собственные ETag и предоставляйте правильный MIME-тип вручную. - Обработка статических файлов для модулей теперь требует явного указания имени папки с статическими файлами. Предыдущее автоматическое обнаружение не было надёжным и вызывало проблемы в Google App Engine. До версии 1.0 старое поведение будет продолжать работать, но будут выведены предупреждения об устаревших зависимостях.
- Исправлена проблема работы Flask на jython.
- Добавлена переменная конфигурации
PROPAGATE_EXCEPTIONS, которая может использоваться для изменения настройки распространения исключений, которая ранее была связана только сDEBUG, а теперь связана либо сDEBUG, либо сTESTING. - Flask больше не зависит от правил, добавляемых через функцию
add_url_rule, и теперь также может принимать обычные правила Werkzeug, добавленные в карту URL. - Добавлен метод
endpointк объекту приложения Flask, который позволяет зарегистрировать обратный вызов на произвольный конечный пункт с помощью декоратора. - Используется Last-Modified для отправки статических файлов вместо Date, что было неправильно введено в 0.6.
- Добавлен
create_jinja_loaderдля переопределения процесса создания загрузчика. - Реализован флаг безмолвия для
config.from_pyfile. - Добавлен декоратор
teardown_requestдля функций, которые должны выполняться в конце запроса независимо от того, произошла ли ошибка. Также поведениеafter_requestбыло изменено. Теперь оно не выполняется, когда возникает исключение. - Реализован
has_request_context. - Устарела функция
init_jinja_globals. Используйте методFlask.create_jinja_environmentвместо этого, чтобы добиться той же функциональности. - Добавлен
safe_join. - Автоматическое распаковывание данных запроса в формате JSON теперь проверяет параметр MIME-типа кодировки.
- Не изменяйте сессию на
get_flashed_messages, если в сессии нет сообщений. -
Обработчики
before_requestтеперь могут прерывать запросы с ошибками. - Определение пользовательских обработчиков исключений больше недоступно. Таким образом, вы можете предоставить настраиваемые сообщения об ошибках из централизованного узла для определённых ошибок, которые могут возникнуть во время обработки запроса (например, ошибки подключения к базе данных, таймауты удалённых ресурсов и т.д.).
- Blueprints могут предоставлять обработчики ошибок, специфичные для blueprints.
- Реализованы общие представления на основе класса.
Версия 0.6.1
Выпущено 2010-12-31
- Исправлена проблема, из-за которой ответ
OPTIONSпо умолчанию не отображал все допустимые методы в заголовкеAllow. - Синтаксис загрузки шаблонов Jinja2 теперь позволяет использовать «./» перед путём загрузки шаблона. Ранее это вызывало проблемы с настройками модулей.
- Исправлена проблема, из-за которой настройка поддомена для модулей игнорировалась для папки со статическими файлами.
- Исправлена проблема безопасности, которая позволяла клиентам загружать произвольные файлы, если хост-сервер работал на операционной системе Windows, и клиент использует обратные слэши для экранирования директории, из которой файлы были предоставлены.
Версия 0.6
Выпущено 2010-07-27, кодовое имя Виски
- Функции по запросу теперь вызываются в обратном порядке регистрации.
- OPTIONS теперь автоматически реализуется Flask, если приложение явно не добавляет «OPTIONS» в качестве метода к правилу URL. В этом случае автоматическая обработка OPTIONS не включается.
- Статические правила теперь применяются даже если для модуля нет статической папки. Это было реализовано для поддержки GAE, которая удалит статическую папку, если она является частью сопоставления в файле .yml.
-
Flask.configтеперь доступен в шаблонах какconfig. - Обработчики контекста больше не будут перезаписывать значения, переданные непосредственно функции render.
- Добавлена возможность ограничивать данные входящего запроса с помощью нового значения конфигурации
MAX_CONTENT_LENGTH. - Конечная точка для метода
Module.add_url_ruleтеперь является необязательной, чтобы соответствовать функции с тем же именем на объекте приложения. - Добавлена функция
make_responseдля упрощения создания экземпляров объектов ответа в представлениях. - Добавлена поддержка сигнализации на основе blinker. Эта функция в настоящее время является необязательной и должна использоваться расширениями и приложениями. Если вы хотите использовать её, убедитесь, что установлен
blinker. - Переработан способ создания адаптеров URL. Этот процесс теперь полностью настраивается с помощью метода
Flask.create_url_adapter. - Модули теперь могут регистрироваться для поддомена вместо просто префикса URL. Это позволяет привязать весь модуль к настраиваемому поддомену.
Версия 0.5.2
Выпущено 2010-07-15
- Исправлена другая проблема с загрузкой шаблонов из каталогов при использовании модулей.
Версия 0.5.1
Выпущено 2010-07-06
- Исправлена проблема с загрузкой шаблонов из каталогов при использовании модулей.
Версия 0.5
Выпущено 2010-07-06, кодовое имя Кальвадос
- Исправлена ошибка с поддоменами, которая была вызвана невозможностью указать имя сервера. Имя сервера теперь можно установить с помощью ключа конфигурации
SERVER_NAME. Этот ключ теперь также используется для установки куки сессии для кросс-поддоменного использования. - Автоматическое экранирование больше не активно для всех шаблонов. Вместо этого оно активно только для
.html,.htm,.xmlи.xhtml. Внутри шаблонов это поведение можно изменить с помощью тегаautoescape. - Переработан Flask внутри. Теперь он состоит из более чем одного файла.
-
send_fileтеперь выводит теги etag и имеет встроенную возможность условных ответов. - (временно) прекращена поддержка сжатых приложений. Это была редко используемая функция и приводила к некоторому путанице в поведении.
- Добавлена поддержка папок шаблонов и статических файлов на уровне пакетов.
- Удалена поддержка
create_jinja_loader, которая больше не используется в 0.5 из-за улучшенной поддержки модулей. - Добавлена вспомогательная функция для экспорта файлов из любого каталога.
Версия 0.4
Выпущено 2010-06-18, кодовое имя Ракия
- Добавлена возможность регистрации обработчиков ошибок на уровне приложения из модулей.
-
Flask.after_requestобработчики теперь также вызываются, если запрос завершается с ошибкой, и появляется страница обработки ошибок. - Клиент тестирования больше не имеет возможности сохранить контекст запроса на немного большее время. Это также можно использовать для запуска пользовательских запросов, которые не удаляют стек запросов для тестирования.
- Поскольку стандартная библиотека Python кэширует логгеры, имя логгера теперь настраивается для лучшей поддержки unittests.
- Добавлен переключатель
TESTING, который может активировать вспомогательные функции для unit-тестирования. - Логгер переключается в режим
DEBUGтеперь, если включен режим отладки.
Версия 0.3.1
Выпущено 2010-05-28
- Исправлена ошибка в отчёте об ошибках с
Config.from_envvar. - Удалены некоторые неиспользуемые фрагменты кода.
- В релизе больше нет оставшихся файлов разработки (.git папки для тем, сгенерированная документация в zip и pdf файлах и некоторые .pyc файлы)
Версия 0.3
Выпущено 2010-05-28, кодовое имя Шнапс
- Добавлена поддержка категорий для сообщений о всплывающих сообщениях.
- Приложение теперь настраивает
logging.Handlerи будет записывать исключения при обработке запросов в этот логгер, когда режим отладки выключен. Это позволяет получать уведомления по электронной почте о серверных ошибках, например. - Добавлена поддержка привязки контекста, которая не требует использования оператора with для работы в консоли.
- Контекст запроса теперь доступен в операторе with, что позволяет дополнительно добавлять контекст запроса или удалять его.
- Добавлена поддержка конфигураций.
Версия 0.2
Выпущено 2010-05-12, кодовое имя Й?гермайстер
- Различные исправления ошибок
- Встроенная поддержка JSON
- Добавлена вспомогательная функция
get_template_attribute. -
Flask.add_url_ruleтеперь также может зарегистрировать функцию представления. - Переработана внутренняя диспетчеризация запросов.
- Сервер теперь по умолчанию прослушивает 127.0.0.1, чтобы исправить проблемы с Chrome.
- Добавлена поддержка внешних URL.
- Добавлена поддержка
send_file. - Поддержка модулей и внутренняя переработка обработки запросов для лучшей поддержки подключаемых приложений.
- Сессии теперь можно сделать постоянными на основе каждой сессии.
- Улучшена обработка ошибок при отсутствии секретных ключей.
- Добавлена поддержка Google App Engine.
Версия 0.1
Выпущено 2010-04-16
- Первый публичный предварительный выпуск.
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/stable/changes/