Изменения
Версия 2.0.1
Не выпущена
- Добавлен параметр
filenameвsend_from_directory. Параметрfilenameпереименован вpath, старое имя устарело. #4019
Версия 2.0.0
Выпущена 2021-05-11
- Прекращена поддержка Python 2 и 3.5.
- Повышены минимальные версии других проектов Pallets: Werkzeug >= 2, Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8. Обязательно ознакомьтесь с изменениями в каждом проекте. Для лучшей совместимости с другими приложениями (например, Celery), которые всё ещё требуют Click 7, жёсткой зависимости от Click 8 пока нет, но использование Click 7 вызовет DeprecationWarning, а Flask 2.1 будет зависеть от Click 8.
- Поддержка JSON больше не использует simplejson. Чтобы использовать другой модуль JSON, переопределите
app.json_encoderиjson_decoder. #3555 - Опция
encodingдля функций JSON устарела. #3562 - Передача
script_infoв функции фабрики приложения устарела. Это не было переносимо за пределы командыflask. Используйтеclick.get_current_context().obj, если это необходимо. #3552 - Командная строка отображает более информативные сообщения об ошибках, когда приложение не удалось загрузить при поиске команд. #2741
- Добавлен
sessions.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.2
Выпущена 2020-04-03
- Решение проблемы при запуске команды
flaskс внешним отладчиком в Windows. #3297 - Статический маршрут не перехватывает все URL, если аргумент
Flaskstatic_folderзаканчивается на слеш. #3452
Версия 1.1.1
Выпущена 2019-07-08
- Флаг
flask.json_availableбыл добавлен обратно для совместимости с некоторыми расширениями. При использовании он будет генерировать предупреждение об устаревании, и будет удалён в версии 2.0.0. #3288
Версия 1.1.0
Выпущена 2019-07-04
END_OF_DOCUMENT_MARKER- Увеличить минимальную версию 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 -
flask.RequestContext.copy()включает текущий объект сессии в копию контекста запроса. Это предотвращает, чтоsessionуказывает на устаревший объект. #2935 - Использование встроенного RequestContext, непечатаемые символы Unicode в заголовке Host приведут к ответу HTTP 400, а не HTTP 500, как раньше. #2994
-
send_file()поддерживает объектыPathLike, как описано в PEP 0519, для поддержки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()поддерживаетdataclasses.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 получить доступ к приложениям и контекстам запросов, например, для запроса данных в базе данных по ID. #3088
Версия 1.0.4
Выпущена 2019-07-04
- Ключевая информация для
BadRequestKeyErrorбольше не очищается вне режима отладки, поэтому обработчики ошибок по-прежнему могут к ней получить доступ. Для этого требуется обновление до Werkzeug 0.15.5. #3249 -
send_fileurl приводит к экранированию символов “:” и “/” для большей совместимости с UTF-8 кодировкой имен файлов в некоторых браузерах. #3074 - Исправления для загрузчиков импорта PEP451 и 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
- Исправление дополнительных проблем обратной совместимости с объединением слешей между префиксом блока и маршрутом. #2748
- Исправление ошибки с командой
flask routesпри отсутствии маршрутов. #2751
Версия 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.jsonify()по умолчанию возвращает компактный формат, а в режиме отладки — отформатированный. -
Flask.__init__принимает аргументhost_matchingи устанавливает его вurl_map. #1559 -
Flask.__init__принимает аргументstatic_hostи передает его как аргументhostпри определении статического маршрута. #1559 -
send_file()поддерживает Unicode вattachment_filename. #2223 - Передайте аргумент
_schemeизurl_for()вhandle_url_build_error(). #2017 -
add_url_rule()принимает аргументprovide_automatic_optionsдля отключения добавления методаOPTIONS. #1489 -
MethodViewподклассы наследуют обработчики методов от базовых классов. #1936 - Ошибки, возникшие при открытии сессии в начале запроса, обрабатываются обработчиками ошибок приложения. #2254
- Модули расширений получили атрибуты
json_encoderиjson_decoderдля переопределения кодировщика и декодировщика приложения. #1898 -
Flask.make_response()генерируетTypeErrorвместоValueErrorпри некорректном типе ответа. Сообщения об ошибках улучшены для описания причин некорректного типа. #2256 - Добавьте команду CLI
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может указывать на локальные пакеты, которые не установлены в режиме редактирования, хотяpip install -eвсё ещё предпочтительнее. #2414 - Атрибут класса
Viewprovide_automatic_optionsустанавливается вas_view(), для обнаруженияadd_url_rule(). #2316 - Обработка ошибок будет пытаться найти обработчики, зарегистрированные для
blueprint, code,app, code,blueprint, exception,app, exception. #2314 -
Cookieдобавляется в заголовок ответаVary, если к сессии обращались во время запроса (и не удалялись). #2288 -
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. Это добавляет методыis_json()иget_json()к ответу, что значительно упростит тестирование JSON-ответов. #2358 - Удалена кэширование обработчика ошибок, так как оно приводило к неожиданным результатам для некоторых иерархий наследования исключений. Зарегистрируйте обработчики явно для каждого исключения, если хотите избежать обхода MRO. #2362
- Исправлена неправильная кодировка JSON для временных значений, осознающих часовой пояс, но не UTC. #2374
- Автоперезагрузка шаблонов будет учитывать режим отладки, даже если
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 - Добавлен
test_cli_runner()для создания Click-раннера, который может вызывать команды Flask CLI для тестирования. #2636 - Совпадение по домену по умолчанию отключено, и установка
SERVER_NAMEне подразумевает его включение. Его можно включить, передавsubdomain_matching=Trueв конструкторFlask. #2635 - Из пути Blueprint
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 выдает предупреждение о больших 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при возникновенииImportErrorвнутри импортированного модуля приложения. - Исправлено поведение кодировки
app.config.from_pyfileдля Python 3. #2118 - Использовать
SERVER_NAMEнастройки в качестве значений по умолчанию дляapp.run. #2109, #2152 - Вызов
ctx.auto_popс объектом исключения вместоNone, в случае возникновения исключения, например,KeyboardInterruptв обработчике запроса.
Версия 0.12
Выпущено 2016-12-21, кодовое имя Punsch
- Команда cli теперь реагирует на
--version. - Предсказание MIME-типов и генерация ETag для объектов типа file в
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
- Добавлена поддержка сериализации массивов верхнего уровня в
flask.jsonify(). Это вносит риск безопасности в старых браузерах. - Добавлен сигнал before_render_template.
- Добавлен
**kwargsвflask.Test.test_client()для поддержки передачи дополнительных ключевых аргументов в конструкторflask.Flask.test_client_class. - Добавлен
SESSION_REFRESH_EACH_REQUESTпараметр конфигурации, который управляет поведением set-cookie. Если он установлен вTrue, постоянная сессия будет обновляться каждый запрос и продлевать свой срок действия, если установлен вFalse, она будет изменяться только если сессия действительно изменяется. На постоянные сессии это не влияет, и они всегда истекают, если окно браузера закрывается. - Flask теперь поддерживает пользовательские MIME-типы JSON для входных данных.
- Добавлена поддержка возвращения кортежей в виде
(response, headers)из функции представления. - Добавлен
flask.Config.from_json(). - Добавлен
flask.Flask.config_class. - Добавлен
flask.Config.get_namespace(). - Шаблоны больше не перезагружаются автоматически вне режима отладки. Это можно настроить с помощью нового параметра конфигурации
TEMPLATES_AUTO_RELOAD. - Добавлен обходной путь для ограничения в загрузчике имен пространства имён Python 3.3.
- Добавлена поддержка явных корневых путей при использовании пакетов пространства имен Python 3.3.
- Добавлены flask и
flask.cliмодуль для запуска локального сервера отладки через систему командной строки click. Это рекомендуется вместо старого методаflask.run(), так как он работает быстрее и надёжнее благодаря другой архитектуре, а также заменяетFlask-Script. - Обработчики ошибок, соответствующие определённым классам, теперь проверяются в первую очередь, что позволяет перехватывать исключения, которые являются подклассами исключений HTTP (в
werkzeug.exceptions). Это позволяет автору расширения создавать исключения, которые по умолчанию приводят к ошибке HTTP по их выбору, но могут быть перехвачены пользовательским обработчиком ошибок, если это необходимо. - Добавлен
flask.Config.from_mapping(). - Flask теперь будет регистрировать логи по умолчанию, даже если отладка отключена. Формат лога теперь жёстко задан, но обработка логов по умолчанию может быть отключена через параметр конфигурации
LOGGER_HANDLER_POLICY. - Удалена устаревшая функциональность модуля.
- Добавлен флаг конфигурации
EXPLAIN_TEMPLATE_LOADING, который, при включении, подскажет Flask, как он находит шаблоны. Это должно помочь пользователям в отладке, когда загружаются неверные шаблоны. - Обработка шаблонов Blueprint выполняется в том порядке, в котором они были зарегистрированы.
- Тестовый пакет перенесён на py.test.
- Устаревший
request.jsonзаменён наrequest.get_json(). - В методе jsonify() добавлены определения разделителей "pretty" и "compressed". Уменьшает размер ответа JSON при
JSONIFY_PRETTYPRINT_REGULAR=False, удаляя ненужные пробелы, которые по умолчанию включаются после разделителей. - Теперь JSON-ответы завершаются символом новой строки, потому что это соглашение, что текстовые файлы UNIX заканчиваются новой строкой, и некоторые клиенты плохо реагируют, когда эта новая строка отсутствует. Это первоначально появилось как часть https://github.com/postmanlabs/httpbin/issues/168. #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вflask.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не будут доступны, и обработчики контекста бланкета не вызываются. - Объект конфигурации теперь доступен шаблону как настоящий глобальный, а не через обработчик контекста, что делает его доступным даже в импортированных шаблонах по умолчанию.
- Добавлена возможность генерировать JSON без кодировки ASCII, что должно привести к меньшему объёму данных, передаваемых по сети. По умолчанию она отключена, чтобы не создать путаницы с существующими библиотеками, которые могут ожидать, что
flask.json.dumpsвернёт байты по умолчанию. -
flask.gтеперь хранится в контексте приложения, а не в контексте запроса. -
flask.gтеперь получил методget()для того, чтобы не выдавать ошибок при обращении к несуществующим элементам. -
flask.gтеперь может использоваться с операторомinдля проверки того, что определено, и теперь является итерируемым и будет возвращать все сохранённые атрибуты. -
flask.Flask.request_globals_classпереименован вflask.Flask.app_ctx_globals_class, что лучше отражает его функциональность с версии 0.10. -
request,sessionиgтакже добавлены в качестве прокси в контекст шаблона, что делает их доступными в импортированных шаблонах. Однако необходимо проявлять осторожность, так как использование вне макросов может вызвать кеширование. - Flask больше не будет вызывать неправильные обработчики ошибок, если исключение прокси передаётся через него.
- Добавлен обходной путь для работы куки Chrome в localhost с именами доменов.
- Изменена логика выбора значений по умолчанию для cookie из сессии для лучшей работы с Google Chrome.
- Добавлен
message_flashedсигнал, упрощающий тестирование флэшинга. - Добавлена поддержка копирования контекстов запросов для лучшей работы с greenlets.
- Удалены пользовательские подклассы исключений HTTP JSON. Если вы полагались на них, вы можете легко их восстановить. Тем не менее, их использование крайне не рекомендуется, так как интерфейс был ошибочным.
- Изменены требования к Python: теперь требуется Python 2.6 или 2.7 для подготовки к портированию на Python 3.3.
- Изменено, как система завершения уведомляется об исключениях. Теперь это более надёжно в случае, если что-то обрабатывает исключение на полпути к обработке ошибки.
- Сохранение контекста запроса в режиме отладки теперь сохраняет информацию об исключениях, что позволяет обработчикам завершения отличать случаи ошибок от успешных.
- Добавлена переменная конфигурации
JSONIFY_PRETTYPRINT_REGULAR. - Flask теперь по умолчанию упорядочивает ключи JSON, чтобы не повредить кэш HTTP из-за различных семян хэшей между различными рабочими процессами.
- Добавлены сигналы
appcontext_pushedиappcontext_popped. - Встроенный метод run теперь учитывает
SERVER_NAMEпри выборе порта по умолчанию. - Добавлен
flask.request.get_json()в качестве замены старому свойствуflask.request.json.
Версия 0.9
Выпущено 2012-07-01, кодовое имя Campari
- Метод
flask.Request.on_json_loading_failed()теперь по умолчанию возвращает ответ в формате JSON. - Функция
flask.url_for()теперь может генерировать якоря для сгенерированных ссылок. - Функция
flask.url_for()теперь также может явно генерировать правила URL, специфичные для заданного HTTP-метода. - Журнал теперь возвращает значение настройки debug, только если оно не было задано явно.
- При завершении запроса отменяется циклическая зависимость между средой WSGI и объектом запроса. Это означает, что environ
werkzeug.requestбудетNoneпосле того, как ответ был возвращен серверу WSGI, но имеет преимущество, что сборщик мусора не нужен на CPython для разбора запроса, если пользователь не создал циклических зависимостей. - Сессия теперь сохраняется после обратных вызовов, так что если данные сессии хранятся в сессии, вы можете изменить её в обратном вызове после запроса.
- Класс
flask.Flaskбудет избегать импорта предоставленного имени импорта, если сможет (требуемый первый параметр), чтобы помочь инструментам, которые программно создают экземпляры Flask. Класс Flask вернётся к использованию импорта на системах с настраиваемыми крючками модулей, например Google App Engine, или когда имя импорта находится внутри zip-архива (обычно .egg) до Python 2.7. - Бланкеты теперь имеют декоратор для добавления пользовательских фильтров шаблонов во всём приложении,
flask.Blueprint.app_template_filter(). - Классы Flask и Blueprint теперь имеют метод без декоратора для добавления пользовательских фильтров шаблонов во всём приложении,
flask.Flask.add_template_filter()иflask.Blueprint.add_app_template_filter(). - Функция
flask.get_flashed_messages()теперь позволяет отображать категории сообщений флэша в отдельных блоках с помощью аргументаcategory_filter. - Метод
flask.Flask.run()теперь принимаетNoneдляhostиportаргументов, используя значения по умолчанию, когдаNone. Это позволяет вызывать run с помощью значений конфигурации, напримерapp.run(app.config.get('MYHOST'), app.config.get('MYPORT')), с правильным поведением, независимо от того, предоставлен ли файл конфигурации. - Метод
flask.render_template()теперь принимает либо итерируемый список имён шаблонов, либо одно имя шаблона. Ранее он принимал только одно имя шаблона. При итерируемом списке, рендерится первый найденный шаблон. - Добавлен
flask.Flask.app_context(), который работает очень похоже на контекст запроса, но предоставляет доступ только к текущему приложению. Это также добавляет поддержку генерации URL без активного контекста запроса. - Функции представления теперь могут возвращать кортеж, первым элементом которого является экземпляр
flask.Response. Это позволяет возвращатьjsonify(error="error msg"), 400из функции представления. -
FlaskиBlueprintтеперь предоставляютget_send_file_max_age()обработчик для подклассов, чтобы переопределить поведение обслуживания статических файлов из Flask при использованииflask.Flask.send_static_file()(используется для обработчика статических файлов по умолчанию) иsend_file(). Этот обработчик получает имя файла, что, например, позволяет изменять заголовки кеша по расширению файла. Максимальное значение max-age дляsend_fileи статических файлов можно настроить с помощью новой переменной конфигурацииSEND_FILE_MAX_AGE_DEFAULT, используемой в реализацииget_send_file_max_ageпо умолчанию. - Исправлена предпосылка в реализации сессий, которая могла нарушить показ сообщений в реализации сессий, использующих внешнее хранилище.
- Изменено поведение кортежей, возвращаемых функциями. Они больше не являются аргументами объекта ответа, теперь они имеют определённое значение.
- Добавлен
flask.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.
- Теперь пустые файлы cookie сессии удаляются автоматически.
- Функции представления теперь могут отказаться от автоматической реализации OPTIONS.
- Теперь можно перехватывать исключения HTTP и ошибки Bad Request, чтобы они отображались в трассировке нормально.
- Flask в режиме отладки теперь обнаруживает некоторые распространённые проблемы и пытается предупредить вас об них.
- Flask в режиме отладки теперь будет жаловаться с ошибкой утверждения, если представление было подключено после обработки первого запроса. Это даёт более раннюю обратную связь, когда пользователи забывают импортировать код представления заранее.
- Добавлена возможность регистрации обратных вызовов, которые срабатывают только один раз в начале первого запроса. (
Flask.before_first_request()) - Неправильные данные JSON теперь будут вызывать исключение HTTP bad request вместо ошибки значения, которая обычно приводила бы к ошибке 500 внутреннего сервера, если не обрабатывается. Это изменение несовместимо со старыми версиями.
- Приложения теперь имеют не только корневую директорию, где расположены ресурсы и модули, но и директорию экземпляра, которая является назначенным местом для размещения файлов, изменённых во время выполнения (загрузки и т. д.). Кроме того, это по концепции зависит только от экземпляра и находится вне системы контроля версий, поэтому это идеальное место для размещения конфигурационных файлов и т. д.
- Добавлена переменная конфигурации
APPLICATION_ROOT. - Реализован
session_transaction()для лёгкой модификации сессий из тестовой среды. - Внутренне переработан клиент тестов. Переменная конфигурации
APPLICATION_ROOTиSERVER_NAMEтеперь должным образом используются клиентом тестов в качестве значений по умолчанию. - Добавлен
flask.views.View.decoratorsдля поддержки более простого декорирования подключаемых (классовых) представлений. - Исправлена проблема, из-за которой клиент тестов, если использовался с оператором «with», не вызывал обработчики завершения.
- Добавлен более точный контроль параметров файлов cookie сессии.
- Запросы HEAD к представлению метода теперь автоматически перенаправляются на метод
get, если обработчик не был реализован. - Реализован виртуальный пакет
flask.extдля импорта расширений. - Сохранение контекста при возникновении исключений теперь является неотъемлемой частью самого Flask, а не клиента тестов. Это позволило улучшить внутреннюю логику и снизить вероятность возникновения проблем с контекстами запросов в модульных тестах.
- Исправлен метод Jinja2 environment’s
list_templatesдля возвращения правильных имён при использовании компонентов blueprints или модулей.
Версия 0.7.2
Выпущено 2011-07-06
- Исправлена проблема с URL-обработчиками, которые не работали должным образом с компонентами blueprints.
Версия 0.7.1
Выпущено 2011-06-29
- Добавлен недостающий импорт future, который нарушал совместимость с версией 2.5.
- Исправлена проблема бесконечного перенаправления с компонентами blueprints.
Версия 0.7
Выпущено 2011-06-28, кодовое имя Grappa
- Добавлен
make_default_options_response(), который может быть использован подклассами для изменения поведения по умолчанию дляOPTIONSответов. - Несвязанные локальные переменные теперь вызывают правильное исключение
RuntimeErrorвместоAttributeError. - Предварительное определение MIME-типов и поддержка etag, основанные на объектах файлов, теперь устарели для
flask.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. Теперь оно больше не выполняется при возникновении исключения. - Реализована функция
flask.has_request_context() - Устарела функция
init_jinja_globals. Используйте методcreate_jinja_environment()для достижения аналогичного результата. - Добавлена функция
flask.safe_join() - Автоматическое распаковки данных запроса JSON теперь учитывает параметр charset MIME-типа.
- Не изменяйте сессию при вызове
flask.get_flashed_messages(), если в сессии нет сообщений. -
Обработчики
before_requestтеперь могут прерывать запросы с ошибками. - Определение пользовательских обработчиков исключений больше не возможно. Таким образом, вы можете предоставлять пользовательские сообщения об ошибках из центрального узла для определённых ошибок, которые могут возникнуть во время обработки запроса (например, ошибки подключения к базе данных, таймауты от удалённых ресурсов и т. д.).
- Компоненты blueprints могут предоставлять обработчики ошибок, специфичные для blueprints.
- Реализованы общие классовые представления.
Версия 0.6.1
Выпущено 2010-12-31
- Исправлена проблема, из-за которой стандартный
OPTIONSответ не отображал все допустимые методы в заголовкеAllow. - Синтаксис загрузки шаблонов Jinja2 теперь позволяет использовать «./» перед путём загрузки шаблона. Раньше это вызывало проблемы с настройками модулей.
- Исправлена проблема, из-за которой настройка поддомена для модулей игнорировалась для папки с статическими файлами.
- Исправлена проблема безопасности, которая позволяла клиентам загружать произвольные файлы, если хост-сервер был основан на операционной системе Windows, а клиент использует обратные косые черты для экранирования каталога, из которого файлы были доступны.
Версия 0.6
Выпущено 2010-07-27, кодовое имя Whisky
- Функции после запроса теперь вызываются в обратном порядке регистрации.
- OPTIONS теперь автоматически реализуется Flask, если приложение явно не добавляет «OPTIONS» в качестве метода к правилу URL. В этом случае автоматическая обработка OPTIONS не срабатывает.
- Правила статических файлов теперь присутствуют даже если для модуля нет папки со статическими файлами. Это было реализовано для поддержки Google App Engine, который удаляет папку со статическими файлами, если она является частью отображения в файле .yml.
- Переменная
configтеперь доступна в шаблонах какconfig. - Обработчики контекста больше не будут переопределять значения, передаваемые непосредственно в функцию рендеринга.
- Добавлена возможность ограничения данных входящего запроса с помощью новой переменной конфигурации
MAX_CONTENT_LENGTH. - Конечная точка для метода
flask.Module.add_url_rule()теперь необязательна, чтобы соответствовать функции с таким же именем в объекте приложения. - Добавлена функция
flask.make_response()для упрощения создания экземпляров объектов ответов в представлениях. - Добавлена поддержка сигнализации на основе blinker. Эта функция в настоящее время является необязательной и предназначена для использования расширениями и приложениями. Если вы хотите её использовать, убедитесь, что у вас установлен blinker.
- Переработан способ создания адаптеров URL. Этот процесс теперь полностью настраивается с помощью метода
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. Теперь он состоит из более чем одного файла.
-
flask.send_file()теперь генерирует etag и имеет встроенную возможность выполнения условных ответов. - (временно) прекращена поддержка архивированных приложений. Это была редко используемая функция и приводила к некоторым непонятным действиям.
- Добавлена поддержка папок с шаблонами и статическими файлами на уровне пакетов.
- Удалена поддержка
create_jinja_loader, которая больше не используется в версии 0.5 из-за улучшенной поддержки модулей. - Добавлена вспомогательная функция для экспорта файлов из любого каталога.
Версия 0.4
Выпущено 2010-06-18, кодовое имя Rakia
- Добавлена возможность регистрировать обработчики ошибок на уровне приложения из модулей.
-
after_request()обработчики теперь также вызываются, если запрос завершился с исключением и была показана страница обработки ошибок. - Клиент для тестирования не имеет возможности сохранить контекст запроса на некоторое время. Это также может использоваться для запуска пользовательских запросов, которые не удаляют стек запросов для тестирования.
- Поскольку стандартная библиотека Python кэширует логгеры, теперь имя логгера настраивается для лучшей поддержки юнит-тестов.
- Добавлен
TESTINGпереключатель, который может активировать вспомогательные средства для юнит-тестирования. - Логгер переключается в
DEBUGрежим теперь, если включен режим отладки.
Версия 0.3.1
Выпущено 2010-05-28
- Исправлена ошибка в отчёте об ошибках с
flask.Config.from_envvar() - Удален некоторый неиспользуемый код из Flask
- Выпуск больше не включает оставшиеся файлы разработки (.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(). -
add_url_rule()теперь также может регистрировать функцию представления. - Рефакторинг внутренней диспетчеризации запросов.
- Сервер теперь по умолчанию прослушивает 127.0.0.1, чтобы исправить проблемы с Chrome.
- Добавлена поддержка внешних URL-адресов.
- Добавлена поддержка
send_file() - Поддержка модулей и рефакторинг внутренней обработки запросов для лучшей поддержки подключаемых приложений.
- Сессии теперь могут быть установлены постоянными на основе каждой сессии.
- Улучшена обработка ошибок при отсутствии секретных ключей.
- Добавлена поддержка Google App Engine.
Версия 0.1
Выпущено 2010-04-16
- Первый публичный предварительный выпуск.
© 2007–2021 Pallets
Licensed under the BSD 3-clause License.
https://flask.palletsprojects.com/en/2.0.x/changes/