Spec-Zone.ru › Flask 2.0

Изменения

Версия 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, если аргумент Flask static_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 run CLI для указания дополнительных файлов, которые будут запускать релоадер при изменении. #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_file url приводит к экранированию символов “:” и “/” для большей совместимости с 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
  • Атрибут класса View provide_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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API