变化 — Flask 文档

来自菜鸟教程
Flask/docs/2.0.x/changes
跳转至:导航、​搜索

历史变更

版本 2.0.3

未发行

  • 测试客户端的 as_tuple 参数已弃用,并将在 Werkzeug 2.1 中删除。 它现在也在 Flask 中被弃用,在 Flask 2.1 中被删除,同时在 2.0.x 中保持与两者兼容。 请改用 response.request.environ:pr:`4341`
  • 修复 errorhandler 装饰器的类型注释。 :问题:`4295`
  • 恢复对 CLI 的更改,该更改导致它在导入应用程序时隐藏 ImportError 回溯。 :问题:`4307`


版本 2.0.2

发布 2021-10-04


版本 2.0.1

发布 2021-05-21

  • 重新添加send_from_directory中的filename参数。 filename 参数已重命名为 path,旧名称已弃用。 :pr:`4019`
  • 将顶级名称标记为导出,以便类型检查理解用户项目中的导入。 :问题:`4024`
  • 修复 g 的类型注释并通知 mypy 它是一个具有任意属性的命名空间对象。 :问题:`4020`
  • 修复一些在 Python 3.6.0 中不可用的类型。 :问题:`4040`
  • 改进 send_filesend_from_directoryget_send_file_max_age 的输入。 :issue:`4044`, :pr:`4026`
  • 当蓝图名称包含点时显示错误。 . 有特殊含义,用于分隔(嵌套)蓝图名称和端点名称。 :问题:`4041`
  • 在嵌套使用 url_prefix 值创建的蓝图时组合 URL 前缀。 :问题:`4037`
  • 回滚对 URL 匹配完成顺序的更改。 加载会话后 URL 将再次匹配,因此会话可在自定义 URL 转换器中使用。 :问题:`4053`
  • 重新添加不推荐使用的 Config.from_json,它被提前删除了。 :问题:`4078`
  • 在类型签名中使用 Callable 改进某些函数的类型,重点是装饰器工厂。 :问题:`4060`
  • 嵌套蓝图使用其带点名称进行注册。 这允许具有相同名称的不同蓝图嵌套在不同位置。 :问题:`4069`
  • register_blueprint 使用 name 选项来更改注册蓝图的(预先加点的)名称。 这允许使用 url_for 的唯一名称多次注册相同的蓝图。 不推荐使用相同的名称多次注册相同的蓝图。 :问题:`1091`
  • 改进 stream_with_context 的输入。 :问题:`4052`


版本 2.0.0

发布 2021-05-11

  • 放弃对 Python 2 和 3.5 的支持。
  • Bump 其他 Pallets 项目的最低版本:Werkzeug >= 2,Jinja2 >= 3,MarkupSafe >= 2,ItsDangerous >= 2,点击 >= 8。 请务必检查每个项目的更改日志。 为了更好地与其他应用程序兼容(例如 Celery)仍然需要 Click 7,目前还没有对 Click 8 的硬依赖,但使用 Click 7 会触发 DeprecationWarning,而 Flask 2.1 将依赖 Click 8。
  • JSON 支持不再使用 simplejson。 要使用另一个 JSON 模块,请覆盖 app.json_encoderjson_decoder:问题:`3555`
  • JSON 函数的 encoding 选项已弃用。 :pr:`3562`
  • 不推荐将 script_info 传递给应用工厂函数。 这在 flask 命令之外是不可移植的。 如果需要,请使用 click.get_current_context().obj:问题:`3552`
  • 当应用程序在查找命令时无法加载时,CLI 会显示更好的错误消息。 :问题:`2741`
  • 添加 sessions.SessionInterface.get_cookie_name() 以允许动态设置会话 cookie 名称。 :pr:`3369`
  • 添加 Config.from_file() 以使用任意文件加载器加载配置,例如 toml.loadjson.loadConfig.from_json() 已被弃用以支持此功能。 :pr:`3398`
  • flask run 命令只会在重新加载时延迟错误。 初始调用期间出现的错误将导致服务器立即退出并进行回溯。 :问题:`3431`
  • send_file() 在文本模式下传递 io 对象时引发 ValueError。 以前,它会响应 200 OK 和一个空文件。 :问题:`3358`
  • 使用临时证书时,请检查加密库而不是 PyOpenSSL。 :pr:`3492`
  • 当用 FLASK_APP 指定工厂函数时,可以传递关键字参数。 :问题:`3553`
  • 加载 .env.flaskenv 文件时,当前工作目录不再更改为文件所在的位置。 :pr:`3560`
  • 当从视图返回 (response, headers) 元组时,标头替换而不是扩展响应中的现有标头。 例如,这允许为 jsonify() 设置 Content-Type。 如果需要扩展,请使用 response.headers.extend():问题:`3628`
  • Scaffold 类为 FlaskBlueprint 类提供了一个通用 API。 Blueprint 信息像 Flask 一样存储在属性中,而不是不透明的 lambda 函数。 这是为了提高一致性和可维护性。 :问题:`3215`
  • 删除会话 cookie 时包括 samesitesecure 选项。 :pr:`3726`
  • 支持将 pathlib.Path 传递给 static_folder:pr:`3579`
  • send_filesend_from_directorywerkzeug.utils 中实现的包装器。 :pr:`3828`
  • 一些 send_file 参数已重命名,旧名称已弃用。 attachment_filename 更名为 download_namecache_timeout 更名为 max_ageadd_etags 更名为 etag:pr:`3828, 3883`
  • send_file 通过 download_name 即使 as_attachment=False 使用 Content-Disposition: inline:pr:`3828`
  • send_file 默认设置 conditional=Truemax_age=None。 如果未设置 max_age,则 Cache-Control 设置为 no-cache,否则设置为 public。 这告诉浏览器验证条件请求而不是使用定时缓存。 :pr:`3828`
  • helpers.safe_join 已弃用。 请改用 werkzeug.utils.safe_join:pr:`3828`
  • 请求上下文在打开会话之前进行路由匹配。 这可能允许会话界面基于 request.endpoint 更改行为。 :问题:`3776`
  • 使用 Jinja 的 |tojson 过滤器实现。 :问题:`3881`
  • 为常见的 HTTP 方法添加路由装饰器。 例如,@app.post("/login")@app.route("/login", methods=["POST"]) 的快捷方式。 :pr:`3907`
  • 支持异步视图、错误处理程序、请求前后和拆卸功能。 :pr:`3412`
  • 支持嵌套蓝图。 :issue:`593, 1548`, :pr:`3923`
  • 加载 .env.flaskenv 文件时,将默认编码设置为“UTF-8”,以允许使用非 ASCII 字符。 :问题:`3931`
  • 如果安装了 readlineflask shell 会像默认的 python shell 一样设置选项卡和历史记录完成。 :问题:`3941`
  • helpers.total_seconds() 已弃用。 请改用 timedelta.total_seconds():pr:`3962`
  • 添加类型提示。 :pr:`3973`


版本 1.1.4

发布 2021-05-13

  • 更新static_folder使用_compat.fspath代替os.fspath继续支持 Python < 3.6 :问题:`4050`


版本 1.1.3

发布 2021-05-13

  • 设置 Werkzeug、Jinja、Click 和 ItsDangerous 的最大版本。 :问题:`4043`
  • 重新添加对为 static_folder 传递 pathlib.Path 的支持。 :pr:`3579`


版本 1.1.2

发布 2020-04-03

  • 解决在 Windows 上使用外部调试器运行 flask 命令时出现的问题。 :问题:`3297`
  • 如果 Flask static_folder 参数以斜杠结尾,静态路由将不会捕获所有 URL。 :问题:`3452`


版本 1.1.1

发布 2019-07-08

  • 为了与某些扩展兼容,重新添加了 flask.json_available 标志。 使用时会引发弃用警告,并将在 2.0.0 版中删除。 :问题:`3288`


版本 1.1.0

发布 2019-07-04

  • 将最低 Werkzeug 版本提升到 >= 0.15。
  • 新增对Python3.4的支持。
  • InternalServerError500 的错误处理程序将始终传递一个 InternalServerError 的实例。 如果由于未处理的异常而调用它们,则原始异常现在可作为 e.original_exception 使用,而不是直接传递给处理程序。 如果处理程序用于基础 HTTPException,情况也是如此。 这使得错误处理程序的行为更加一致。 :pr:`3266`
    • 即使没有 500 错误处理程序,也会为所有未处理的异常调用 Flask.finalize_request()
  • Flask.loggerFlask.name 同名(作为 Flask(import_name) 传递的值。 这将恢复 1.0 始终登录到 "flask.app" 的行为,以便在同一进程中支持多个应用程序。 如果检测到需要移动的旧配置,则会显示警告。 :问题:`2866`
  • flask.RequestContext.copy() 在请求上下文副本中包含当前会话对象。 这可以防止 session 指向过时的对象。 :问题:`2935`
  • 使用内置的 RequestContext,Host 标头中不可打印的 Unicode 字符将导致 HTTP 400 响应,而不是之前的 HTTP 500。 :pr:`2994`
  • send_file() 支持 PathLike 对象,如 PEP 0519 中所述,以支持 Python 3 中的 pathlib:pr:`3059`
  • send_file() 支持 BytesIO 部分内容。 :问题:`2957`
  • open_resource() 接受“rt”文件模式。 这仍然与“r”做同样的事情。 :问题:`3163`
  • 子类使用基类中设置的 MethodView.methods 属性。 :问题:`3138`
  • Flask.jinja_optionsdict 而不是 ImmutableDict,以便于配置。 在创建环境之前,仍然必须进行更改。 :pr:`3190`
  • Flask 的 JSONMixin 用于请求和响应包装器已移至 Werkzeug。 使用具有 Flask 特定支持的 Werkzeug 版本。 这会将 Werkzeug 依赖项提高到 >= 0.15。 :问题:`3125`
  • flask 命令入口点被简化以利用 Werkzeug 0.15 更好的重新加载器支持。 这会将 Werkzeug 依赖项提高到 >= 0.15。 :问题:`3022`
  • 支持以正斜杠结尾的 static_url_path:问题:`3134`
  • 支持空static_folder,无需设置空static_url_path:pr:`3124`
  • jsonify() 支持 dataclasses.dataclass 对象。 :pr:`3195`
  • 允许自定义用于路由的 Flask.url_map_class:pr:`3069`
  • 开发服务器端口可以设置为 0,这会告诉操作系统选择一个可用的端口。 :问题:`2926`
  • cli.load_dotenv() 的返回值更符合文档。 如果未安装 python-dotenv,或者给定的路径不是文件,它将返回 False:问题:`2937`
  • 当未安装 Blinker 库时,信令支持具有 connect_via 方法的存根。 :pr:`3208`
  • --extra-files 选项添加到 flask run CLI 命令以指定将在更改时触发重新加载器的额外文件。 :问题:`2897`
  • 允许从视图函数返回字典。 类似于返回字符串将产生 text/html 响应的方式,返回 dict 将调用 jsonify 以产生 application/json 响应。 :pr:`3111`
  • 蓝图有一个 cli 点击组,如 app.cli。 使用蓝图注册的 CLI 命令将在 flask 命令下作为一个组使用。 :问题:`1357`
  • 当使用测试客户端作为上下文管理器 (with client:) 时,所有保留的请求上下文会在块退出时弹出,确保正确清理嵌套上下文。 :pr:`3157`
  • 当不支持视图返回类型时显示更好的错误消息。 :问题:`3214`
  • flask.testing.make_test_environ_builder() 已被弃用,取而代之的是一个新的类 flask.testing.EnvironBuilder:pr:`3232`
  • 如果 Python 未使用 SSL 支持构建,则 flask run 命令不再失败。 使用 --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`
  • 在 stderr 而不是 stdout 上显示有关 dotenv 的消息。 :问题:`3285`


版本 1.0.3

发布 2019-05-17

  • send_file() 将文件名编码为 ASCII 而不是 Latin-1 (ISO-8859-1)。 这修复了与 Gunicorn 的兼容性,Gunicorn 对标头编码比 PEP 3333 更严格。 :问题:`2766`
  • 允许使用 FlaskGroup 的自定义 CLI 设置调试标志,而不总是根据环境变量覆盖它。 :pr:`2765`
  • flask --version 输出 Werkzeug 的版本并简化 Python 版本。 :pr:`2825`
  • send_file() 处理一个 attachment_filename,它是一个带有 UTF-8 编码字节的原生 Python 2 字符串(字节)。 :问题:`2933`
  • HTTPException 注册的全能错误处理程序不会处理路由期间内部使用的 RoutingException。 这修复了 1.0 中引入的意外行为。 :pr:`2986`
  • json 参数传递给 app.test_client 不会推送/弹出额外的应用程序上下文。 :问题:`2900`


版本 1.0.2

发布 2018-05-02

  • 通过在蓝图前缀和路由之间合并斜杠来修复更多向后兼容性问题。 :pr:`2748`
  • 修复没有路由时 flask routes 命令的错误。 :问题:`2751`


版本 1.0.1

发布 2018-04-29

  • 修复将部分注册(没有 __name__)作为视图函数。 :pr:`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,点击 >= 5.1。 :问题:`2586`
  • 从命令行运行 Flask 应用程序时跳过 app.run。 这避免了一些令人困惑的调试行为。
  • JSONIFY_PRETTYPRINT_REGULAR 的默认值更改为 Falsejsonify() 默认返回紧凑格式,在调试模式下返回缩进格式。 :pr:`2193`
  • Flask.__init__ 接受 host_matching 参数并将其设置在 url_map 上。 :问题:`1559`
  • Flask.__init__ 接受 static_host 参数并在定义静态路由时将其作为 host 参数传递。 :问题:`1559`
  • send_file() 支持 [X30X] 中的 Unicode。 :pr:`2223`
  • _scheme 参数从 url_for() 传递到 handle_url_build_error():pr:`2017`
  • add_url_rule() 接受 provide_automatic_options 参数以禁用添加 OPTIONS 方法。 :pr:`1489`
  • MethodView 子类从基类继承方法处理程序。 :pr:`1936`
  • 在请求开始时打开会话时导致的错误由应用程序的错误处理程序处理。 :pr:`2254`
  • 蓝图获得 json_encoderjson_decoder 属性以覆盖应用程序的编码器和解码器。 :pr:`1898`
  • Flask.make_response() 提升 TypeError 而不是 ValueError 对于不良响应类型。 已改进错误消息以描述类型无效的原因。 :pr:`2256`
  • 添加 routes CLI 命令以输出应用程序上注册的路由。 :pr:`2259`
  • 当会话 cookie 域是裸主机名或 IP 地址时显示警告,因为这些在某些浏览器(例如 Chrome)中可能无法正常运行。 :pr:`2282`
  • 允许 IP 地址作为确切的会话 cookie 域。 :pr:`2282`
  • 如果通过 SERVER_NAME 检测到,则设置 SESSION_COOKIE_DOMAIN:pr:`2282`
  • 自动检测来自 FLASK_APP 的名为 create_appmake_app 的零参数应用程序工厂。 :pr:`2297`
  • 工厂函数不需要采用 script_info 参数来使用 flask 命令。 如果它们采用单个参数或名为 script_info 的参数,则将传递 ScriptInfo 对象。 :pr:`2319`
  • FLASK_APP 可以设置为应用程序工厂,如果需要,可以使用参数,例如 FLASK_APP=myproject.app:create_app('dev'):pr:`2326`
  • FLASK_APP 可以指向未在可编辑模式下安装的本地包,尽管 pip install -e 仍然是首选。 :pr:`2414`
  • View类属性provide_automatic_options设置在as_view()中,由add_url_rule()检测。 :pr:`2316`
  • 错误处理将尝试为 blueprint, codeapp, codeblueprint, exceptionapp, exception 注册的处理程序。 :pr:`2314`
  • Cookie 被添加到响应的 Vary 标头,如果会话在请求期间被访问(并且没有被删除)。 :pr:`2288`
  • test_request_context() 接受 subdomainurl_scheme 参数以在构建基本 URL 时使用。 :pr:`1621`
  • 默认设置 APPLICATION_ROOT'/'。 当它设置为 None 时,这已经是隐式默认值。
  • TRAP_BAD_REQUEST_ERRORS 在调试模式下默认启用。 BadRequestKeyError 在调试模式下有一条带有坏密钥的消息,而不是一般的坏请求消息。 :pr:`2348`
  • 允许使用 TaggedJSONSerializer 注册新标签以支持在会话 cookie 中存储其他类型。 :pr:`2352`
  • 仅当请求尚未推送到上下文堆栈时才打开会话。 这允许 stream_with_context() 生成器访问包含视图使用的相同会话。 :pr:`2354`
  • 为测试客户端请求方法添加 json 关键字参数。 这会将给定的对象转储为 JSON 并设置适当的内容类型。 :pr:`2358`
  • 将 JSON 处理提取到应用于 RequestResponse 类的 mixin。 这将 is_json()get_json() 方法添加到响应中,使测试 JSON 响应变得更加容易。 :pr:`2358`
  • 删除了错误处理程序缓存,因为它会导致某些异常继承层次结构出现意外结果。 如果您想避免遍历 MRO,请为每个异常显式注册处理程序。 :pr:`2362`
  • 修复感知的非 UTC 日期时间的错误 JSON 编码。 :pr:`2374`
  • 即使 jinja_env 已经被访问,模板自动重新加载也会支持调试模式。 :pr:`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`
  • 支持将 EnvironBuilderdict 传递给 test_client.open:pr:`2412`
  • 如果安装了 python-dotenv,flask 命令和 Flask.run() 将从 .env.flaskenv 文件加载环境变量。 :pr:`2416`
  • 将完整 URL 传递给测试客户端时,将使用 URL 中的方案而不是 PREFERRED_URL_SCHEME:pr:`2430`
  • Flask.logger 已被简化。 LOGGER_NAMELOGGER_HANDLER_POLICY 配置被删除。 记录器始终命名为 flask.app。 该级别仅在第一次访问时设置,不会每次都检查 Flask.debug。 仅使用一种格式,根据 Flask.debug 不会使用不同的格式。 不会删除处理程序,并且仅在尚未配置处理程序的情况下添加处理程序。 :pr:`2436`
  • 蓝图视图函数名称不能包含点。 :pr:`2450`
  • 修复在某些情况下无效 Range 请求导致的 ValueError:问题:`2526`
  • 开发服务器默认使用线程。 :pr:`2529`
  • 使用 silent=True 加载配置文件将忽略 ENOTDIR 错误。 :pr:`2581`
  • --cert--key 选项传递给 flask run 以通过 HTTPS 运行开发服务器。 :pr:`2606`
  • 添加了 SESSION_COOKIE_SAMESITE 以控制会话 cookie 上的 SameSite 属性。 :pr:`2607`
  • 添加了 test_cli_runner() 以创建可以调用 Flask CLI 命令进行测试的 Click 运行程序。 :pr:`2636`
  • 默认情况下禁用子域匹配,设置 SERVER_NAME 不会隐式启用它。 可以通过将 subdomain_matching=True 传递给 Flask 构造函数来启用它。 :pr:`2635`
  • 当它在应用程序中注册时,从蓝图 url_prefix 中删除一个尾部斜杠。 :pr:`2629`
  • Request.get_json()silent 为真时解析失败,不会缓存结果。 :问题:`2651`
  • Request.get_json() 不再接受任意编码。 传入的 JSON 应根据 RFC 8259 使用 UTF-8 进行编码,但 Flask 将自动检测 UTF-8、-16 或 -32。 :pr:`2691`
  • 添加了 MAX_COOKIE_SIZEResponse.max_cookie_size 以控制 Werkzeug 何时警告浏览器可能会忽略的大型 cookie。 :pr:`2693`
  • 更新了文档主题,使文档在小窗口中看起来更好。 :pr:`2709`
  • 重写了教程文档和示例项目,以采用更结构化的方法来帮助新用户避免常见的陷阱。 :pr:`2676`


版本 0.12.5

发布 2020-02-10


版本 0.12.4

发布 2018-04-29


版本 0.12.3

发布 2018-04-26

  • Request.get_json() 不再接受任意编码。 传入的 JSON 应根据 RFC 8259 使用 UTF-8 进行编码,但 Flask 将自动检测 UTF-8、-16 或 -32。 :问题:`2692`
  • 修复使用 python -m flask 时有关导入的 Python 警告。 :问题:`2666`
  • 修复在某些情况下无效 Range 请求导致的 ValueError


版本 0.12.2

发布 2017-05-16

  • 修复 Windows 上 safe_join 中的错误。


版本 0.12.1

发布 2017-03-31

  • 当导入的应用程序模块中出现 ImportError 时,防止 flask run 显示 NoAppException
  • 修复 Python 3 的 app.config.from_pyfile 的编码行为。 :问题:`2118`
  • 如果 SERVER_NAME 配置作为 app.run 的默认值存在,请使用该配置。 :issue:`2109`, :pr:`2152`
  • 如果在请求处理程序中引发了 BaseException(例如 KeyboardInterrupt),则使用异常对象而不是 None 调用 ctx.auto_pop


版本 0.12

2016-12-21 发布,代号 Punsch

  • cli 命令现在响应 --version
  • send_file 中文件类对象的 Mimetype 猜测和 ETag 生成已被删除。 :issue:`104`,:pr`1849`
  • send_file 中的 Mimetype 猜测现在会大声失败并且不会回退到 application/octet-stream:pr:`1988`
  • 使 flask.safe_join 能够加入多个路径,如 os.path.join :pr:`1730`
  • 还原导致开发服务器崩溃而不是返回内部服务器错误的行为更改。 :pr:`2006`
  • 为常规请求分派和错误处理程序正确调用响应处理程序。
  • 默认情况下为应用记录器禁用记录器传播。
  • send_file 中添加对范围请求的支持。
  • app.test_client 包含预设默认环境,现在可以直接设置,而不是每个 client.get
  • 修复在 PyPy3 下运行时的崩溃。 :pr:`1814`


版本 0.11.1

发布 2016-06-07

  • 修复了阻止 FLASK_APP=foobar/__init__.py 工作的错误。 :pr:`1872`


版本 0.11

发布时间:2016-05-29,代号苦艾酒

  • 添加了对将顶级数组序列化为 flask.jsonify() 的支持。 这在古老的浏览器中引入了安全风险。
  • 添加 before_render_template 信号。
  • **kwargs 添加到 flask.Test.test_client() 以支持向 flask.Flask.test_client_class 的构造函数传递额外的关键字参数。
  • 添加了控制 set-cookie 行为的 SESSION_REFRESH_EACH_REQUEST 配置键。 如果设置为 True 一个永久会话将被刷新每个请求并延长它们的生命周期,如果设置为 False 它只会在会话实际修改时被修改。 非永久会话不受此影响,并且在浏览器窗口关闭时将始终过期。
  • 使 Flask 支持传入数据的自定义 JSON mimetypes。
  • 添加了对从视图函数返回 (response, headers) 形式的元组的支持。
  • 添加了 flask.Config.from_json()
  • 添加了 flask.Flask.config_class
  • 添加了 flask.Config.get_namespace()
  • 模板不再在调试模式之外自动重新加载。 这可以使用新的 TEMPLATES_AUTO_RELOAD 配置键进行配置。
  • 为 Python 3.3 的命名空间加载器中的限制添加了解决方法。
  • 在使用 Python 3.3 的命名空间包时添加了对显式根路径的支持。
  • 新增flaskflask.cli模块,通过click CLI系统启动本地调试服务器。 推荐使用旧的 flask.run() 方法,因为它由于不同的设计而运行得更快、更可靠,并且还取代了 Flask-Script
  • 现在首先检查匹配特定类的错误处理程序,从而允许捕获作为 HTTP 异常子类的异常(在 werkzeug.exceptions 中)。 这使得扩展作者可以创建异常,默认情况下会导致他们选择的 HTTP 错误,但如果需要,可能会被自定义错误处理程序捕获。
  • 添加了 flask.Config.from_mapping()
  • 即使禁用了调试,Flask 现在也会默认记录日志。 日志格式现在是硬编码的,但可以通过 LOGGER_HANDLER_POLICY 配置键禁用默认日志处理。
  • 删除了不推荐使用的模块功能。
  • 添加了 EXPLAIN_TEMPLATE_LOADING 配置标志,启用后将指示 Flask 解释它如何定位模板。 这应该有助于用户在加载错误模板时进行调试。
  • 按照为模板加载注册的顺序强制执行蓝图处理。
  • 将测试套件移植到 py.test。
  • 不推荐使用 request.json 以支持 [X34X]。
  • 在 jsonify() 方法中添加“漂亮”和“压缩”分隔符定义。 在 JSONIFY_PRETTYPRINT_REGULAR=False 时通过删除分隔符后默认包含的不必要的空格来减少 JSON 响应大小。
  • JSON 响应现在以换行符终止,因为 UNIX 文本文件以换行符结尾是惯例,并且当缺少该换行符时,某些客户端无法很好地处理。 这最初是作为 https://github.com/postmanlabs/httpbin/issues/168 的一部分出现的。 :pr:`1262`
  • 如果用户使用小写版本 options 注册覆盖规则,则现在可以正确禁用自动提供的 OPTIONS 方法。 :问题:`1288`
  • flask.json.jsonify 现在支持 datetime.date 类型。 :pr:`1326`
  • 不要将已经捕获的异常的异常信息泄露给上下文拆卸处理程序。 :pr:`1393`
  • 允许自定义 Jinja 环境子类。 :pr:`1422`
  • 更新了扩展开发指南。
  • flask.g 现在有 pop()setdefault 方法。
  • 默认情况下为 flask.templating.render_template_string 开启自动转义。 :pr:`1515`
  • flask.ext 现已弃用。 :pr:`1484`
  • 如果文件名在服务器操作系统上无效,send_from_directory 现在会引发 BadRequest。 :pr:`1763`
  • 添加了 JSONIFY_MIMETYPE 配置变量。 :pr:`1728`
  • 拆卸处理期间的异常将不再留下糟糕的应用程序上下文。
  • 修复了损坏的 test_appcontext_signals() 测试用例。
  • flask.helpers.find_package() 中引发 AttributeError 并带有一条有用的消息,解释为什么在没有 is_package() 方法的情况下使用 PEP 302 导入挂钩时会引发该问题。
  • 修复了在输入要传递给拆卸处理程序的请求或应用程序上下文之前引发异常的问题。
  • 修复了在请求绝对 URL 时从测试客户端的请求中删除查询参数的问题。
  • 按预期将 @before_first_request 制成装饰器。
  • 修复了发送带有名称的文件流时的 etags 错误。
  • 修复了 send_from_directory 未正确扩展到应用程序根路径的问题。
  • 更改了第一个请求处理程序之前的逻辑以在调用后翻转标志。 这将允许一些具有潜在危险但可能应该被允许的用途。
  • 修复了 app.url_build_error_handlers 中的处理程序重新加注 BuildError 时的 Python 3 错误。


版本 0.10.1

发布 2013-06-14

  • 修复了 |tojson 未引用单引号导致过滤器在 HTML 属性中无法正常工作的问题。 现在可以在单引号属性中使用该过滤器。 这应该使在 angular.js 中使用该过滤器更容易。
  • 添加了对返回会话系统的字节字符串的支持。 这破坏了人们将用于令牌验证的二进制数据放入会话的常见情况的兼容性。
  • 修复了为同一端点注册相同方法两次会错误触发异常的问题。


版本 0.10

2013-06-13 发布,代号 Limoncello

  • 将默认 cookie 序列化格式从 pickle 更改为 JSON,以限制攻击者在密钥泄露时可能造成的影响。
  • 除了现有的 template_filter 方法系列之外,还添加了 template_test 方法。
  • 除了现有的 template_filter 方法系列之外,还添加了 template_global 方法。
  • 设置 x-sendfile 的内容长度标头。
  • tojson 过滤器现在不会转义 HTML5 解析器中的脚本块。
  • 模板中使用的 tojson 现在默认是安全的。 由于不同的转义行为,这是允许的。
  • 如果您尝试在已使用的端点上注册新函数,Flask 现在将引发错误。
  • 添加了围绕 simplejson 的包装器模块并添加了日期时间对象的默认序列化。 这允许更轻松地自定义 Flask 或任何 Flask 扩展如何处理 JSON。
  • 删除了已弃用的内部 flask.session 模块别名。 使用 flask.sessions 来获取会话模块。 这不要与 flask.session 会话代理混淆。
  • 现在可以在没有请求上下文的情况下呈现模板。 行为略有不同,因为 requestsessiong 对象将不可用,并且不会调用蓝图的上下文处理器。
  • config 对象现在可作为真正的全局模板使用,而不是通过上下文处理器使用,这使其即使在默认情况下在导入的模板中也可用。
  • 添加了一个选项来生成非 ascii 编码的 JSON,这应该会导致通过网络传输的字节更少。 默认情况下禁用它,以免与可能期望 flask.json.dumps 默认返回字节的现有库混淆。
  • flask.g 现在存储在应用程序上下文而不是请求上下文中。
  • flask.g 现在获得了 get() 方法,不会在不存在的物品上出错。
  • flask.g 现在可以与 in 运算符一起使用,以查看定义的内容,现在它是可迭代的,并将产生存储的所有属性。
  • flask.Flask.request_globals_class 重命名为 flask.Flask.app_ctx_globals_class,这是自 0.10 以来它所做的更好的名称。
  • requestsessiong 现在也作为代理添加到模板上下文中,这使得它们在导入的模板中可用。 但是必须非常小心,因为宏之外的使用可能会导致缓存。
  • 如果通过代理异常,Flask 将不再调用错误的错误处理程序。
  • 为 localhost 中的 chrome cookie 添加了一种解决方法,该解决方法无法按预期使用域名。
  • 更改了从会话中选择 cookie 值的默认值的逻辑,以便更好地与 Google Chrome 配合使用。
  • 添加了简化闪烁测试的 message_flashed 信号。
  • 添加了对复制请求上下文的支持,以便更好地使用 greenlets。
  • 删除了自定义 JSON HTTP 异常子类。 如果您依赖它们,您可以轻松地自己重新引入它们。 然而,强烈建议不要使用它们,因为界面存在缺陷。
  • Python 要求已更改:现在需要 Python 2.6 或 2.7 以准备 Python 3.3 端口。
  • 更改了拆卸系统如何通知异常的方式。 如果某些东西在错误处理过程中途处理异常,这现在更可靠。
  • 调试模式下的请求上下文保留现在保留异常信息,这意味着拆卸处理程序能够区分错误和成功案例。
  • 添加了 JSONIFY_PRETTYPRINT_REGULAR 配置变量。
  • Flask 现在默认对 JSON 密钥进行排序,以免由于不同工作人员之间的不同哈希种子而破坏 HTTP 缓存。
  • 添加了 appcontext_pushedappcontext_popped 信号。
  • 现在,在选择要运行的默认端口时,内置的 run 方法会考虑 SERVER_NAME
  • 添加 flask.request.get_json() 作为旧的 flask.request.json 属性的替代。


0.9 版

2012-07-01 发布,代号金巴利

  • flask.Request.on_json_loading_failed() 现在默认返回 JSON 格式的响应。
  • flask.url_for() 函数现在可以为生成的链接生成锚点。
  • flask.url_for() 函数现在还可以显式生成特定于给定 HTTP 方法的 URL 规则。
  • 如果未明确设置,Logger 现在仅返回调试日志设置。
  • 关闭请求时,取消注册 WSGI 环境和请求对象之间的循环依赖。 这意味着在响应返回到 WSGI 服务器后,environ werkzeug.request 将是 None 但优点是 CPython 不需要垃圾收集器来拆除请求,除非用户创建循环依赖本身。
  • 会话现在存储在回调之后,因此如果会话有效负载存储在会话中,您仍然可以在请求后回调中修改它。
  • flask.Flask 类将尽可能避免导入提供的导入名称(必需的第一个参数),以使以编程方式构建 Flask 实例的工具受益。 Flask 类将回退到在具有自定义模块挂钩的系统上使用导入,例如 Google App Engine,或者当导入名称在 Python 2.7 之前的 zip 存档(通常是 .egg)中时。
  • 蓝图现在有一个装饰器,可以在应用范围内添加自定义模板过滤器,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 作为 hostport 参数,在 None 时使用默认值。 这允许使用配置值调用运行,例如 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
  • FlaskBlueprint 现在为子类提供 get_send_file_max_age() 钩子,以覆盖使用 flask.Flask.send_static_file() 时从 Flask 提供静态文件的行为(用于默认静态文件处理程序) 和 send_file()。 这个钩子提供了一个文件名,例如允许通过文件扩展名更改缓存控制。 send_file 和静态文件的默认 max-age 可以通过新的 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 异常和错误请求错误,以便它们在回溯中正常显示。
  • 处于调试模式的 Flask 现在正在检测一些常见问题并尝试向您发出警告。
  • 如果在处理第一个请求后附加了视图,则处于调试模式的 Flask 现在将报告断言错误。 当用户忘记提前导入视图代码时,这会提供更早的反馈。
  • 添加了注册仅在第一个请求开始时触发一次的回调的功能。 (Flask.before_first_request())
  • 格式错误的 JSON 数据现在将触发错误的请求 HTTP 异常,而不是值错误,如果不处理通常会导致 500 内部服务器错误。 这是向后不兼容的更改。
  • 应用程序现在不仅有资源和模块所在的根路径,而且还有一个实例路径,它是指定放置在运行时修改的文件(上传等)的位置。 此外,这在概念上只是实例依赖和版本控制之外,因此它是放置配置文件等的理想场所。
  • 添加了 APPLICATION_ROOT 配置变量。
  • 实现了 session_transaction() 以从测试环境轻松修改会话。
  • 内部重构测试客户端。 APPLICATION_ROOT 配置变量以及 SERVER_NAME 现在作为默认值被测试客户端正确使用。
  • 添加了 flask.views.View.decorators 以支持更简单的可插拔(基于类)视图的装饰。
  • 修复了测试客户端如果与“with”语句一起使用不会触发拆卸处理程序的执行的问题。
  • 添加了对会话 cookie 参数的更精细控制。
  • 如果未实现处理程序,对方法视图的 HEAD 请求现在会自动分派到 get 方法。
  • 实现了虚拟 flask.ext 包以从中导入扩展。
  • 异常上下文保留现在是 Flask 本身的一个组成部分,不再是测试客户端的一个组成部分。 这清理了一些内部逻辑并降低了单元测试中失控请求上下文的几率。
  • 修复了 Jinja2 环境的 list_templates 方法在涉及蓝图或模块时不返回正确名称的问题。


版本 0.7.2

发布 2011-07-06

  • 修复了 URL 处理器在蓝图上无法正常工作的问题。


版本 0.7.1

发布 2011-06-29

  • 添加了破坏 2.5 兼容性的丢失的未来导入。
  • 修复了蓝图的无限重定向问题。


版本 0.7

2011-06-28 发布,代号 Grappa

  • 添加了 make_default_options_response(),子类可以使用它来改变 OPTIONS 响应的默认行为。
  • 未绑定的本地人现在提出适当的 RuntimeError 而不是 AttributeError
  • flask.send_file() 现在不推荐基于文件对象的 Mimetype 猜测和 etag 支持,因为它不可靠。 改为传递文件名或附加您自己的 etags 并手动提供正确的 mimetype。
  • 模块的静态文件处理现在需要明确提供静态文件夹的名称。 之前的自动检测不可靠,导致 Google App Engine 出现问题。 在 1.0 之前,旧行为将继续工作,但会发出依赖性警告。
  • 修复了 Flask 在 jython 上运行的问题。
  • 添加了一个 PROPAGATE_EXCEPTIONS 配置变量,可用于翻转异常传播的设置,该变量以前单独链接到 DEBUG,现在链接到 DEBUG 或 [ X195X]。
  • Flask 在内部不再依赖于通过 add_url_rule 函数添加的规则,现在也可以接受添加到 url 映射的常规 werkzeug 规则。
  • 向烧瓶应用程序对象添加了 endpoint 方法,该方法允许使用装饰器将回调注册到任意端点。
  • 使用 Last-Modified 进行静态文件发送,而不是 0.6 中错误引入的 Date。
  • 添加了 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 mimetype 参数。
  • 如果会话中没有消息,请不要修改 flask.get_flashed_messages() 上的会话。
  • before_request 处理程序现在能够中止有错误的请求。
  • 无法定义用户异常处理程序。 这样,您可以从中央集线器为请求处理期间可能发生的某些错误(例如数据库连接错误、远程资源超时等)提供自定义错误消息。
  • 蓝图可以提供蓝图特定的错误处理程序。
  • 实现了通用的基于类的视图。


版本 0.6.1

发布 2010-12-31

  • 修复了默认 OPTIONS 响应未公开 Allow 标头中所有有效方法的问题。
  • Jinja2 模板加载语法现在允许在模板加载路径前使用“./”。 以前这会导致模块设置出现问题。
  • 修复了静态文件夹的模块子域设置被忽略的问题。
  • 修复了一个安全问题,如果主机服务器是基于 Windows 的操作系统并且客户端使用反斜杠来转义公开文件的目录,则该问题允许客户端下载任意文件。


版本 0.6

2010-07-27 发布,代号威士忌

  • 现在以与注册相反的顺序调用后请求函数。
  • OPTIONS 现在由 Flask 自动实现,除非应用程序明确地将“OPTIONS”作为方法添加到 URL 规则中。 在这种情况下,不会启动自动 OPTIONS 处理。
  • 如果模块没有静态文件夹,静态规则现在甚至就位。 这是为了帮助 GAE,如果它是 .yml 文件中映射的一部分,它将删除静态文件夹。
  • config 现在作为 config 在模板中可用。
  • 上下文处理器将不再覆盖直接传递给渲染函数的值。
  • 添加了使用新的 MAX_CONTENT_LENGTH 配置值限制传入请求数据的功能。
  • flask.Module.add_url_rule() 方法的端点现在是可选的,以与应用程序对象上的同名函数保持一致。
  • 添加了 flask.make_response() 函数,可简化在视图中创建响应对象实例的过程。
  • 添加了基于闪光灯的信令支持。 此功能目前是可选的,应该由扩展和应用程序使用。 如果要使用它,请确保安装了 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() 现在发出 etags 并能够进行内置的条件响应。
  • (暂时)放弃对压缩应用程序的支持。 这是一个很少使用的功能,并导致了一些令人困惑的行为。
  • 添加了对每个包模板和静态文件目录的支持。
  • 删除了对 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() 的错误报告错误
  • 从烧瓶中删除了一些未使用的代码
  • 发行版不再包含开发剩余文件(主题的 .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 Appengine 的支持。


版本 0.1

发布 2010-04-16

  • 第一个公开预览版。