Изменения
Версия 2.3.3
Не выпущена
- Совместимость с Python 3.12.
- Требуется Werkzeug >= 2.3.6.
- Переработано определение корневого и экземпляра пути приложения. #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для приложения и шаблонов, а также соответствующие классыjson.JSONEncoderиJSONDecoderудалены. - Функции
json.htmlsafe_dumpsиhtmlsafe_dumpудалены. - Вызов методов настройки шаблонов после регистрации — это ошибка вместо предупреждения. #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 - Обеспечьте применение поддоменов с вложенными шаблонами. #4834
-
config.from_fileможет использоватьtext=Falseдля указания того, что парсеру нужен двоичный файл вместо этого. #4989 - Если шаблон создается с пустым именем, генерируется
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в приложении или в макете, а также соответствующих классовjson.JSONEncoderиJSONDecoder, устарели. Теперь поведение JSON может быть переопределено с использованием интерфейса поставщикаapp.json. #4692 -
json.htmlsafe_dumpsиjson.htmlsafe_dumpустарели, функция теперь встроена в Jinja. #4692 - Рефакторинг
register_error_handlerдля консолидации проверки ошибок. Переписаны некоторые сообщения об ошибках для большей согласованности. #4559 - Использование декораторов и функций макета, предназначенных для настройки после регистрации макета, будет выводить предупреждение. В следующей версии это станет ошибкой, как и методы настройки приложения. #4571
-
before_first_requestустарело. Выполняйте код настройки при создании приложения вместо этого. #4605 - Добавлен атрибут класса
View.init_every_request. Если подкласс представления устанавливает его в значениеFalse, представление не будет создавать новый экземпляр на каждом запросе. #2520. - Группа Click
flask.cli.FlaskGroupможет быть вложена в качестве подкоманды в пользовательском интерфейсе командной строки. #3263 - Добавление опций
--appи--debugв интерфейс командной строкиflask, вместо того, чтобы требовать их установки через переменные окружения. #2836 - Добавление опции
--env-fileв интерфейс командной строкиflask. Это позволяет указать файл 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 так же, как и словарь. #4672
- При проверке типов разрешено возвращать
TypedDictиз функций представления. #4695 - Удаление опций
--eager-loading/--lazy-loadingиз командыflask run. Приложение всегда загружается сразу первый раз, а затем загружается лениво в релоадере. Релоадер всегда сразу печатает ошибки, но продолжает обслуживание. Удален внутренний middlewareDispatchingApp, используемый предыдущей реализацией. #4715
Версия 2.1.3
Выпущено 2022-07-13
- Встраивание некоторых необязательных импортов, которые используются только для определённых команд интерфейса командной строки. #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вместоsetuptools, чтобы загружать точки входа команд. #4419 - Переопределение
FlaskClient.openне вызовет ошибку при перенаправлении. #3396 - Добавлен параметр
--exclude-patternsк команде CLIflask run, чтобы указать шаблоны, которые будут игнорироваться релоадером. #4188 - При использовании ленивой загрузки (по умолчанию с отладчиком), контекст Click из команды
flask runостаётся доступным в потоке загрузчика. #4460 - Удаление cookie сессии использует флаг
httponly. #4485 - Смягчение типизации для
errorhandler, чтобы позволить пользователю использовать более точные типы и декорировать одну и ту же функцию несколько раз. #4095, #4295, #4297 - Исправление типизации для методов
__exit__для лучшей совместимости сExitStack. #4474 - Из Werkzeug, для ответов перенаправления
LocationURL заголовка останется относительным и исключит схему и домен по умолчанию. #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 - Отображение ошибки, когда имя blueprint содержит точку.
.имеет специальное значение, используется для разделения (вложенных) имён blueprint и имени конечной точки. #4041 - Объединение префиксов URL при вложении blueprints, которые были созданы со значением
url_prefix. #4037 - Откат изменения в порядке выполнения сопоставления URL. URL снова сопоставляется после загрузки сессии, так что сессия доступна в пользовательских преобразователях URL. #4053
- Возврат устаревшего
Config.from_json, который был случайно удалён ранее. #4078 - Улучшение типизации некоторых функций, использующих
Callableв своих сигнатурах типов, с фокусом на фабриках декораторов. #4060 - Вложенные blueprints регистрируются с их имён с точкой. Это позволяет различным blueprints с одинаковым именем быть вложенными в разных местах. #4069
-
register_blueprintпринимает параметрname, чтобы изменить (предварительно неточное) имя, с которым blueprint регистрируется. Это позволяет регистрировать один и тот же blueprint несколько раз с уникальными именами дляurl_for. Не рекомендуется регистрировать один и тот же blueprint с одинаковым именем несколько раз. #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 - CLI отображает более информативные сообщения об ошибках, когда приложение не удалось загрузить при поиске команд. #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
- Поддержка вложенных blueprints. #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. Это делает поведение обработчиков ошибок более согласованным. #3266-
Flask.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 - Flask’s
JSONMixinдля обёрток запроса и ответа был перемещён в 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 - Блоки имеют группу Click
cliкак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_fileurl приводит в кавычки символы “:” и “/” для большей совместимости с 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_prefixблока и 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 - Добавлена команда CLI
routesдля вывода зарегистрированных маршрутов в приложении. #2259 - Выводится предупреждение, если домен cookie сессии — это просто имя хоста или IP-адрес, так как в некоторых браузерах, например, Chrome, это может работать неправильно.
- Поддержка IP-адреса как точного домена cookie сессии.
-
SESSION_COOKIE_DOMAINустанавливается, если это обнаружено черезSERVER_NAME. #2282 - Автоматическое определение фабрики приложения без аргументов, названной
create_appилиmake_appизFLASK_APP. #2297 - Функции-фабрики не обязаны принимать параметр
script_infoдля работы с командойflask. Если они принимают единственный параметр или параметр с именемscript_info, объектScriptInfoбудет передан. #2319 -
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генераторам получить доступ к той же сессии, что и содержащая их функция представления. #2354 - Добавлен ключевой аргумент
jsonдля методов запроса тестового клиента. Это позволит вывести переданный объект в формате JSON и установить соответствующий тип контента. - Обработка JSON перенесена в миксин, применяемый к классам
RequestиResponse. Это добавит методыResponse.is_jsonиResponse.get_jsonв ответ, что значительно упростит тестирование JSON-ответов. #2358 - Отмена кэширования обработчиков ошибок, так как это приводило к неожиданным результатам для некоторых иерархий наследования исключений. Зарегистрируйте обработчики явно для каждого исключения, если хотите избежать обхода MRO.
- Исправление некорректного кодирования JSON для явных, не UTC, дат.
- Автоперезагрузка шаблонов будет учитывать режим отладки даже в том случае, если
Flask.jinja_envуже был обращён. #2373 -
Удален следующий устаревший код. #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. Обработчики не удаляются, а добавляется обработчик только если обработчики уже не настроены. - Имена функций представления blueprints не должны содержать точки.
- Исправление ошибки
ValueError, вызванной некорректными запросамиRangeв некоторых случаях. - Сервер разработки использует потоки по умолчанию.
- Загрузка файлов конфигурации с
silent=Trueигнорирует ошибкиENOTDIR. #2581 - Передача опций
--certи--keyвflask runдля запуска сервера разработки через HTTPS. - Добавлен
SESSION_COOKIE_SAMESITEдля управления атрибутомSameSitecookie сессии. - Добавлен
Flask.test_cli_runnerдля создания Click-запускателя, который может вызывать команды Flask CLI для тестирования. - Сопоставление по поддоменам отключено по умолчанию, и установка
SERVER_NAMEне подразумевает его включение. Его можно включить, передавsubdomain_matching=Trueв конструкторFlask. - Один обратный слэш удаляется из
url_prefixblueprint при регистрации в приложении. -
Request.get_jsonне кэширует результат, если разбор завершается ошибкой, когдаsilentравно true.
-
Request.get_jsonбольше не принимает произвольные кодировки. Входящий JSON должен быть закодирован с использованием UTF-8 в соответствии с RFC 8259, но Flask будет автоматически определять UTF-8, -16 или -32. #2691 - Добавлены
MAX_COOKIE_SIZEиResponse.max_cookie_sizeдля управления предупреждениями Werkzeug о больших cookie, которые браузеры могут игнорировать. #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
- Предотвращено появление
NoAppExceptionуflask runпри возникновении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 - Откат изменения поведения, из-за которого сервер разработки аварийно завершал работу вместо возврата ошибки 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фильтр теперь не экранирует блоки script в HTML5-парсерах. -
tojsonв шаблонах теперь безопасен по умолчанию. Это было разрешено из-за разного поведения экранирования. - Flask теперь выводит ошибку, если вы пытаетесь зарегистрировать новую функцию на уже используемой конечной точке.
- Добавлен модуль обертки вокруг simplejson и добавлена по умолчанию сериализация объектов datetime. Это позволяет значительно проще настраивать обработку JSON в Flask или любом расширении Flask.
- Удален устаревший внутренний
flask.sessionпсевдоним модуля. Используйтеflask.sessionsвместо него для получения модуля сессий. Это не следует путать сflask.session, прокси сессии. - Шаблоны теперь можно отображать без контекста запроса. Поведение немного отличается, так как объекты
request,sessionиgне будут доступны, и обработчики контекста blueprint не вызываются. - Объект конфигурации теперь доступен в шаблоне как настоящий глобальный, а не через обработчик контекста, что делает его доступным даже в импортированных шаблонах по умолчанию.
- Добавлена возможность генерировать 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, который упрощает тестирование flash сообщений. - Добавлена поддержка копирования контекстов запросов для лучшей работы с greenlet.
- Удалены пользовательские подклассы исключений JSON HTTP. Если вы полагались на них, вы можете легко повторно ввести их самостоятельно. Однако их использование настоятельно не рекомендуется, так как интерфейс был неполным.
- Изменены требования к 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иBlueprint.add_app_template_filter. - Функция
get_flashed_messagesтеперь позволяет отображать категории сообщений flash в отдельных блоках с помощью аргумента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 и больше не зависит от тестового клиента. Это очистило некоторую внутреннюю логику и уменьшает вероятность бесконечных контекстов запросов в модульных тестах.
- Исправлена ошибка метода Jinja2
list_templates, который не возвращал правильные имена при участии планов или модулей.
Версия 0.7.2
Выпущена 2011-07-06
- Исправлена проблема с обработчиками URL, которые не работали должным образом с планами.
Версия 0.7.1
Выпущена 2011-06-29
- Добавлен отсутствующий импорт future, который нарушал совместимость с 2.5.
- Исправлена проблема с бесконечным перенаправлением с планами.
Версия 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-типа charset.
- Не изменяйте сессию при
get_flashed_messages, если в сессии нет сообщений. - Обработчики
before_requestтеперь могут прерывать запросы с ошибками. - Определение пользовательских обработчиков исключений больше недоступно. Таким образом, вы можете предоставлять настраиваемые сообщения об ошибках из центрального узла для определенных ошибок, которые могут возникнуть во время обработки запроса (например, ошибки подключения к базе данных, таймауты удаленных ресурсов и т.д.).
- Планы могут предоставлять специфичные для плана обработчики ошибок.
- Реализованы общие представления на основе класса.
Версия 0.6.1
Выпущена 2010-12-31
- Исправлена проблема, из-за которой стандартный ответ
OPTIONSне отображал все допустимые методы в заголовкеAllow. - Синтаксис загрузки шаблонов Jinja2 теперь допускает «./» перед путем загрузки шаблона. Ранее это вызывало проблемы при настройке модулей.
- Исправлена проблема, из-за которой настройка доменных имен для модулей игнорировалась для папки со статическими файлами.
- Исправлена проблема безопасности, которая позволяла клиентам загружать произвольные файлы, если сервер был на базе Windows, а клиент использовал обратные слэши для экранирования каталога, из которого файлы предоставлялись.
Версия 0.6
Выпущена 2010-07-27, кодовое имя Whisky
- Функции обработки запросов теперь вызываются в обратном порядке регистрации.
- 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, кодовое имя Calvados
- Исправлена ошибка с поддоменами, которая была вызвана невозможностью указать имя сервера. Имя сервера теперь можно задать с помощью ключа конфигурации
SERVER_NAME. Этот ключ также используется для настройки куки сессии на всех поддоменах. - Автоэкранирование больше не включено для всех шаблонов. Теперь оно включено только для
.html,.htm,.xmlи.xhtml. В шаблонах это поведение можно изменить с помощью тегаautoescape. - Внутренний рефакторинг Flask. Теперь он состоит из более чем одного файла.
send_fileтеперь генерирует etag и имеет встроенную возможность условных ответов.- (временно) прекращена поддержка архивированных приложений. Эта функция редко использовалась и приводила к некоторым неясным проблемам.
- Добавлена поддержка папок с шаблонами и статическими файлами для каждого пакета.
- Удалена поддержка
create_jinja_loader, которая больше не используется в 0.5 из-за улучшенной поддержки модулей. - Добавлена вспомогательная функция для предоставления файлов из любого каталога.
Версия 0.4
Выпущена 2010-06-18, кодовое имя Rakia
- Добавлена возможность регистрировать обработчики ошибок на уровне всего приложения из модулей.
- Обработчики ошибок
Flask.after_requestтакже вызываются, если запрос прерывается с исключением и появляется страница обработки ошибок. - Тестовый клиент имеет возможность сохранять контекст запроса чуть дольше. Это также можно использовать для запуска пользовательских запросов, которые не удаляют стек запросов для тестирования.
- Из-за кэширования логгеров стандартной библиотеки Python, имя логгера теперь настраивается для лучшей поддержки модульных тестов.
- Добавлен переключатель
TESTING, который может активировать вспомогательные средства для модульных тестов. - Логгер переключается на режим
DEBUGпри включенной отладке.
Версия 0.3.1
Выпущена 2010-05-28
- Исправлена ошибка в сообщении об ошибке
Config.from_envvar. - Удален неиспользуемый код.
- В релизе больше нет оставшихся файлов разработки (.git папки для тем, сгенерированной документации в zip и pdf файлах и некоторых .pyc файлах)
Версия 0.3
Выпущена 2010-05-28, кодовое название Schnaps
- Добавлена поддержка категорий для всплывающих сообщений.
- Приложение теперь настраивает
logging.Handlerи будет регистрировать исключения обработки запросов в этом логгере, когда режим отладки выключен. Это позволяет получать письма о серверных ошибках, например. - Добавлена поддержка привязки контекста, которая не требует использования оператора with для работы в консоли.
- Контекст запроса теперь доступен внутри оператора with, что позволяет дополнительно добавлять или удалять контекст запроса.
- Добавлена поддержка конфигураций.
Версия 0.2
Выпущена 2010-05-12, кодовое название J?germeister
- Различные исправления ошибок
- Встроена поддержка JSON
- Добавлена функция-помощник
get_template_attribute. -
Flask.add_url_ruleтеперь также может регистрировать функцию отображения. - Рефакторинг внутренней обработки запросов.
- Сервер теперь по умолчанию прослушивает 127.0.0.1, чтобы исправить проблемы с браузером Chrome.
- Добавлена поддержка внешних URL.
- Добавлена поддержка
send_file. - Поддержка модулей и рефакторинг внутренней обработки запросов для лучшей поддержки подключаемых приложений.
- Сессии теперь могут быть постоянными на основе каждой сессии.
- Улучшена обработка ошибок при отсутствии секретных ключей.
- Добавлена поддержка Google App Engine.
Версия 0.1
Выпущена 2010-04-16
- Первый публичный предварительный релиз.
© 2007–2022 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.3.x/changes/