Изменения
Версия 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удалены. - Вызов методов setup для blueprints после регистрации теперь приводит к ошибке вместо предупреждения. #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 - Убедитесь, что поддомены применяются с вложенными blueprints. #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в приложении или макете, а также соответствующих классовjson.JSONEncoderиJSONDecoderустарели. Теперь поведение JSON можно переопределить с помощью интерфейса поставщикаapp.json. #4692 -
json.htmlsafe_dumpsиjson.htmlsafe_dumpустарели, теперь функция встроена в Jinja. #4692 - Рефакторинг
register_error_handlerдля консолидации проверки ошибок. Переписаны некоторые сообщения об ошибках, чтобы они были более согласованными. #4559 - Использование декораторов и функций Blueprint, предназначенных для настройки после регистрации макета, приведет к отображению предупреждения. В следующей версии это станет ошибкой, как и методы настройки приложения. #4571
-
before_first_requestустарел. Выполняйте код настройки при создании приложения вместо этого. #4605 - Добавлен атрибут класса
View.init_every_request. Если подкласс представления устанавливает его вFalse, представление не будет создавать новый экземпляр при каждом запросе. #2520. - Группа Click
flask.cli.FlaskGroupможет быть вложена как подкоманда в пользовательский CLI. #3263 - Добавлены параметры
--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-ответ, как и словарь. #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, для ответов перенаправления заголовок
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для динамического задания имени куки сессии. #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при удалении куки сессии. #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 - Фласк
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 runдля указания дополнительных файлов, которые будут вызывать перезагрузчик при изменении. #2897 - Разрешение возвращать словарь из функции представления. Аналогично тому, как возврат строки создает ответ
text/html, возврат словаря вызоветjsonifyдля создания ответаapplication/json. #3111 - У модулей Blueprints есть группа Click
cliкакapp.cli. Команды CLI, зарегистрированные в модуле blueprints, будут доступны как группа под командой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 - Разрешение пользовательских командных строк с использованием
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
- Дополнительные слеши между префиксом blueprints и маршрутом 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. #2282
- Разрешение 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генераторам получить доступ к той же сессии, которую использует содержащий представление. #2354 - Добавление ключевого аргумента
jsonдля методов запроса тестового клиента. Это позволит преобразовать заданный объект в JSON и установить соответствующий тип содержимого. #2358 - Вынесение обработки JSON в миксин, примененный к классам
RequestиResponse. Это добавляет методыResponse.is_jsonиResponse.get_jsonв ответ, что значительно упрощает тестирование JSON-ответов. #2358 - Удалена кэширование обработчиков ошибок, так как это приводило к неожиданным результатам для некоторых иерархий наследования исключений. Зарегистрируйте обработчики явно для каждого исключения, если хотите избежать обхода MRO. #2362
- Исправлена некорректная кодировка JSON для объектов с часовыми поясами, не являющихся UTC, датами. #2374
- Автоперезагрузка шаблонов будет учитывать режим отладки, даже если
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. Обработчики не удаляются, а обработчик добавляется только если обработчики уже не настроены. #2436 - Имена функций представления Blueprint не могут содержать точки. #2450
- Исправлена ошибка
ValueError, вызванная некорректными запросамиRangeв некоторых случаях. #2526 - Сервер разработки по умолчанию использует потоки. #2529
- Загрузка конфигурационных файлов с помощью
silent=Trueигнорирует ошибкиENOTDIR. #2581 - Передача опций
--certи--keyвflask runдля запуска сервера разработки по протоколу HTTPS. #2606 - Добавление
SESSION_COOKIE_SAMESITEдля управления атрибутомSameSiteв cookie сессии. #2607 - Добавление
Flask.test_cli_runnerдля создания Click-раннера, который может вызывать команды 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
- Предотвратить отображение
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 для объектов типа файл в
send_fileудалены. #104, :pr`1849` - Угадавание MIME-типа в
send_fileтеперь приводит к громкому ошибке и не используетapplication/octet-streamв качестве резервного варианта. #1988 - Сделать
flask.safe_joinспособным объединять несколько путей, например,os.path.join. #1730 - Отменить изменение поведения, которое приводило к ошибке сервера разработки вместо возврата «Внутренняя ошибка сервера». #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 как он находит шаблоны. Это должно помочь пользователям отлаживать, когда загружаются неправильные шаблоны. - Навязано обработку шаблонов blueprints в порядке их регистрации для загрузки шаблонов.
- Тестовый набор перенесен в 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. Это позволяет намного проще настраивать, как Flask или любое расширение Flask обрабатывает JSON.
- Удален устаревший внутренний псевдоним модуля
flask.session. Используйтеflask.sessionsвместо него, чтобы получить модуль сессии. Это не следует путать с прокси сессииflask.session. - Шаблоны теперь могут быть отображены без контекста запроса. Поведение немного отличается, так как объекты
request,sessionиgне будут доступны, а обработчики контекста blueprints не вызываются. - Объект конфигурации теперь доступен шаблону как настоящий глобальный, а не через обработчик контекста, что делает его доступным даже в импортированных шаблонах по умолчанию.
- Добавлена возможность генерировать 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 больше не будет вызывать неправильные обработчики ошибок, если через него передаётся исключение-прокси.
- Добавлен обходной путь для работы cookie 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. - В шаблонах Blueprint теперь есть декоратор для добавления пользовательских фильтров шаблонов на уровне приложения,
Blueprint.app_template_filter. - В классах Flask и Blueprint теперь есть метод без декоратора для добавления пользовательских фильтров шаблонов на уровне приложения,
Flask.add_template_filterиBlueprint.add_app_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 теперь вызывают исключение Bad Request HTTP вместо ошибки значения, которая обычно приводила бы к ошибке 500 Internal Server Error, если не обработана. Это изменение несовместимо со старыми версиями.
- Приложения теперь имеют не только корневой путь, где находятся ресурсы и модули, но также путь экземпляра, который является выделенным местом для файлов, изменяемых во время выполнения (загрузки и т. д.). Также это концептуально зависит только от экземпляра и находится вне контроля версий, поэтому это идеальное место для размещения файлов конфигурации и т. д.
- Добавлена переменная конфигурации
APPLICATION_ROOT. - Реализован
TestClient.session_transactionдля лёгкого изменения сессий из тестовой среды. - Рефакторинг тестового клиента внутренне. Переменные конфигурации
APPLICATION_ROOTиSERVER_NAMEтеперь должным образом используются тестовым клиентом как значения по умолчанию. - Добавлен
View.decoratorsдля поддержки более простого декорирования подключаемых (классовых) представлений. - Исправлена проблема, когда тестовый клиент, если использовался с оператором «with», не запускал обработчики завершения.
- Добавлен более тонкий контроль параметров куки сессии.
- Запросы HEAD к представлению метода теперь автоматически перенаправляются на метод
getесли не реализован обработчик. - Реализован виртуальный пакет
flask.extдля импорта расширений. - Сохранение контекста при исключениях теперь является неотъемлемой частью самого Flask, а не тестового клиента. Это упростило внутреннюю логику и уменьшило вероятность возникновения проблем с контекстами запросов в модульных тестах.
- Исправлен метод
list_templatesсреды Jinja2, который не возвращал правильные имена, когда участвовали шаблоны Blueprint или модули.
Версия 0.7.2
Выпущено 2011-07-06
- Исправлена проблема с обработчиками URL, которые не работали должным образом с шаблонами Blueprint.
Версия 0.7.1
Выпущено 2011-06-29
- Добавлен отсутствующий импорт future, который нарушал совместимость с 2.5.
- Исправлена проблема с бесконечным перенаправлением с шаблонами Blueprint.
Версия 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для переопределения процесса создания загрузчика. - Реализован флаг silent для
config.from_pyfile. - Добавлен декоратор
teardown_requestдля функций, которые должны выполняться в конце запроса независимо от того, возникло ли исключение. Также изменено поведение дляafter_request— оно больше не выполняется при возникновении исключения. - Реализован
has_request_context. - Устарела функция
init_jinja_globals. Для достижения той же функциональности переопределите методFlask.create_jinja_environment. - Добавлен
safe_join. - Автоматическое распаковывание данных запроса в формате JSON теперь учитывает параметр charset MIME-типа.
- Не изменяйте сессию в
get_flashed_messagesесли в сессии нет сообщений. -
before_requestобработчики теперь могут прерывать запросы с ошибками. - Определять обработчики пользовательских исключений больше нельзя. Таким образом, можно предоставлять настраиваемые сообщения об ошибках из центрального узла для определённых ошибок, которые могут возникнуть при обработке запросов (например, ошибки подключения к базе данных, таймауты от удалённых ресурсов и т. д.).
- Шаблоны Blueprint могут предоставлять обработчики ошибок, специфичные для шаблонов Blueprint.
- Реализованы общие представления на основе классов.
Версия 0.6.1
Выпущено 2010-12-31
- Исправлена проблема, когда стандартный ответ
OPTIONSне отображал все допустимые методы в заголовкеAllow. - Синтаксис загрузки шаблонов Jinja2 теперь допускает «./» перед путём загрузки шаблона. Ранее это создавало проблемы при настройке модулей.
- Исправлена проблема, когда параметр поддомена для модулей игнорировался для папки со статическими файлами.
- Исправлена проблема безопасности, которая позволяла клиентам загружать произвольные файлы, если хост-сервер был на базе Windows, а клиент использовал обратную косую черту для экранирования каталога, из которого файлы были доступны.
Версия 0.6
Выпущено 2010-07-27, кодовое имя Whisky
- Функции по запросу теперь вызываются в обратном порядке регистрации.
- OPTIONS теперь автоматически реализуется Flask, если приложение явно не добавляет «OPTIONS» в качестве метода к правилу URL. В этом случае автоматическая обработка OPTIONS не включается.
- Статические правила теперь применяются даже если для модуля нет папки static. Это было реализовано для поддержки GAE, которая удалит папку static, если она является частью отображения в файле .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. Этот ключ теперь также используется для установки cookie сеанса на уровне нескольких поддоменов. - Автоэкранирование больше не активно для всех шаблонов. Вместо этого оно активно только для
.html,.htm,.xmlи.xhtml. Внутри шаблонов это поведение можно изменить с помощью тегаautoescape. - Переработан Flask внутренне. Теперь он состоит из более чем одного файла.
-
send_fileтеперь генерирует etag и имеет встроенную возможность выполнять условные ответы. - (временно) прекращена поддержка архивированных приложений. Это была редко используемая функция и приводила к некоторым запутанным действиям.
- Добавлена поддержка каталогов шаблонов и статических файлов на уровне пакетов.
- Убрана поддержка
create_jinja_loader, которая больше не используется в 0.5 из-за улучшенной поддержки модулей. - Добавлена вспомогательная функция для экспонирования файлов из любого каталога.
Версия 0.4
Выпущено 2010-06-18, кодовое имя Rakia
- Добавлена возможность регистрации обработчиков ошибок на уровне приложения из модулей.
-
Flask.after_requestобработчики теперь также вызываются, если запрос завершается с исключением и отображается страница обработки ошибок. - Тестовый клиент больше не имеет возможности сохранить контекст запроса на немного более длительное время. Это также можно использовать для запуска настраиваемых запросов, которые не удаляют стек запросов для тестирования.
- Поскольку стандартная библиотека Python кэширует логгеры, имя логгера теперь настраиваемо, чтобы лучше поддерживать unit-тесты.
- Добавлен переключатель
TESTING, который может активировать вспомогательные средства unit-тестирования. - Логгер теперь переключается в режим
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 Appengine.
Версия 0.1
Выпущено 2010-04-16
- Первый публичный предварительный выпуск.
© 2010 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/3.0.x/changes/