API

这部分文档涵盖了Flask.的所有接口。对于依赖于外部库的部分,我们在这里记录最重要的部分,并提供到规范文档的链接。

应用程序对象

class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)

Flask对象实现一个wsgi应用程序,并充当中心对象。它将传递应用程序的模块或包的名称。创建后,它将充当视图函数、URL规则、模板配置等的中心注册表。

包的名称用于从包或模块所在的文件夹中解析资源,具体取决于包参数是否解析实际的python包(具有 __init__.py 文件内部)或标准模块(仅 .py 文件)。

有关资源加载的详细信息,请参阅 open_resource() .

通常你会创建一个主模块在 Flask 或 :file:`__init__.py`文件包,如下:

from flask import Flask
app = Flask(__name__)

关于第一个参数

第一个参数是让flask知道什么属于您的应用程序。这个名称主要用于查找文件系统上的资源,或者扩展可以使用它来改进调试信息等等。

所以你在那里提供的东西很重要。如果您使用的是单个模块, __name__ 总是正确的值。但是,如果您使用的是一个包,通常建议在那里硬编码包的名称。

例如,如果应用程序是在 yourapplication/app.py ,您应该使用以下两个版本之一创建它:

app = Flask('yourapplication')
app = Flask(__name__.split('.')[0])

这是为什么呢?由于资源是如何查找的,应用程序甚至可以使用“……name__”。但是它会使调试更加痛苦。某些扩展可以基于应用程序的导入名称进行假设。例如,flask sqlachemy扩展将在应用程序中查找在调试模式下触发SQL查询的代码。如果导入名称设置不正确,则调试信息将丢失。(例如,它只在 yourapplication.app`中接受SQL查询, 而不是 `yourapplication.views.frontend)

Changelog

在 1.0 版本加入: 参数 host_matchingstatic_host 被添加。

在 1.0 版本加入: 参数 subdomain_matching 被添加。子域匹配现在需要手动启用。设置 SERVER_NAME 不会隐式启用它。

在 0.11 版本加入: 参数 root_path 被添加。

在 0.8 版本加入: 参数 instance_pathinstance_relative_config 被添加。

在 0.7 版本加入: 参数 static_url_path, static_folder, 和 template_folder 被添加。

参数:
  • import_name (str) -- 应用程序包的名称

  • static_url_path (str | None) -- 可用于为Web上的静态文件指定其他路径。默认为 static_folder 文件夹。

  • static_folder (str | os.PathLike | None) -- 包含静态文件的文件夹 static_url_path . 相对于应用程序 root_path 或者绝对路径。默认为 'static' .

  • static_host (str | None) -- 添加静态路由时要使用的主机,默认为无。使用时需要 host_matching=True 用一个 static_folder 配置。

  • host_matching (bool) -- 设置 url_map.host_matching 属性。默认为false。

  • subdomain_matching (bool) -- 当匹配路线时,相对于 SERVER_NAME,考虑子域 。默认为false。

  • template_folder (str | os.PathLike | None) -- 包含应用程序应使用的模板的文件夹。默认为应用程序根路径中的文件夹 'templates'

  • instance_path (str | None) -- 应用程序的备用实例路径。默认情况下,文件夹 'instance' 假定包或模块旁边是实例路径。

  • instance_relative_config (bool) -- 如果将用于加载配置的相对文件名设置为' ' True ' ',则假定该配置相对于实例路径而不是应用程序根目录。

  • root_path (str | None) -- 应用程序文件根目录的路径。这应该仅在无法自动检测时手动设置,例如对于命名空间包。

aborter

的一个实例 aborter_class vt.由.创造 make_aborter() 。这是由调用的 flask.abort() 引发HTTP错误,也可以直接调用。

Changelog

在 2.2 版本加入: flask.abort ,它调用此对象。

aborter_class

Aborter 的别名

add_template_filter(f, name=None)

注册自定义模板筛选器。工作原理和 template_filter() 装饰者很像。

参数:
  • name (str | None) -- 筛选器的可选名称,否则将使用函数名。

  • f (Callable[[...], Any]) --

返回类型:

None

add_template_global(f, name=None)

注册自定义模板全局函数。工作原理和 template_global() 装饰者很像。

Changelog

在 0.10 版本加入.

参数:
  • name (str | None) -- 全局函数的可选名称,否则将使用函数名称。

  • f (Callable[[...], Any]) --

返回类型:

None

add_template_test(f, name=None)

注册自定义模板测试。工作原理和 template_test() 装饰者很像。

Changelog

在 0.10 版本加入.

参数:
  • name (str | None) -- 测试的可选名称,否则将使用函数名。

  • f (Callable[[...], bool]) --

返回类型:

None

add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)

注册用于路由传入请求和构建URL的规则。这个 route() 修饰符是使用 view_func 争论。它们是等效的:

@app.route("/")
def index():
    ...
def index():
    ...

app.add_url_rule("/", view_func=index)

看见 URL路由注册

路径的端点名称默认为查看函数的名称,如果 endpoint 参数未传递。如果已为该终结点注册了函数,则会引发错误。

这个 methods 参数默认为 ["GET"]HEAD 始终自动添加,并且 OPTIONS 默认情况下是自动添加的。

view_func 不一定需要传递,但如果规则应该参与路由,则端点名称必须在某个点上与视图函数 endpoint() 装饰师。

app.add_url_rule("/", endpoint="index")

@app.endpoint("index")
def index():
    ...

如果 view_func 有一个 required_methods 属性,则将这些方法添加到传递的和自动的方法中。如果它有一个 provide_automatic_methods 属性时,如果不传递该参数,则将其用作默认值。

参数:
  • rule (str) -- URL规则字符串。

  • endpoint (str | None) -- 要与规则和视图函数关联的终结点名称。在路由和构建URL时使用。默认为 view_func.__name__

  • view_func (ft.RouteCallable | None) -- 要与终结点名称关联的视图函数。

  • provide_automatic_options (bool | None) -- 添加 OPTIONS 方法,并响应 OPTIONS 自动请求。

  • options (t.Any) -- 额外的选项传递给 Rule 对象。

返回类型:

None

after_request(f)

注册一个函数,以便在每次请求此对象后运行。

该函数与响应对象一起调用,并且必须返回响应对象。这允许函数在发送响应之前修改或替换响应。

如果函数引发异常,则任何剩余的 after_request 不会调用函数。因此,这不应用于必须执行的操作,例如关闭资源。使用 teardown_request() 就因为这个。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求后执行。在蓝图上使用时,它在蓝图处理的每个请求之后执行。要使用蓝图注册并在每次请求后执行,请使用 Blueprint.after_app_request()

参数:

f (T_after_request) --

返回类型:

T_after_request

after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable]]

要在每个请求结束时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 after_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

app_context()

创建一个 AppContext . 用作 with 阻止推送情境,这将使 current_app 指向此应用程序。

应用程序情境由自动推送 RequestContext.push() 处理请求和运行CLI命令时。使用它可以在这些情况之外手动创建情境。

with app.app_context():
    init_db()

请详见 应用情境 .

Changelog

在 0.9 版本加入.

返回类型:

AppContext

app_ctx_globals_class

_AppCtxGlobals 的别名

async_to_sync(func)

返回将运行协程函数的同步函数。

result = app.async_to_sync(func)(*args, **kwargs)

重写此方法以更改应用程序将异步代码转换为可同步调用的方式。

Changelog

在 2.0 版本加入.

参数:

func (Callable[[...], Coroutine]) --

返回类型:

Callable[[...], Any]

auto_find_instance_path()

如果实例路径未提供给应用程序类的构造函数,则尝试查找该路径。它将基本上计算到名为 instance 在主文件或包旁边。

Changelog

在 0.8 版本加入.

返回类型:

str

before_request(f)

注册一个要在每个请求之前运行的函数。

例如,这可以用于打开数据库连接,或者从会话加载登录用户。

@app.before_request
def load_user():
    if "user_id" in session:
        g.user = db.session.get(session["user_id"])

将在没有任何参数的情况下调用该函数。如果它返回非``None``值,则将该值当作从视图返回的值进行处理,并停止进一步的请求处理。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求之前执行。在蓝图上使用时,它在蓝图处理的每个请求之前执行。要使用蓝图注册并在每次请求之前执行,请使用 Blueprint.before_app_request()

参数:

f (T_before_request) --

返回类型:

T_before_request

before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]

要在每个请求开始时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 before_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

blueprints: dict[str, Blueprint]

将注册的蓝图名称映射到蓝图对象。词典保留了蓝图注册的顺序。蓝图可以多次注册,但本词典不会跟踪它们被附加的频率。

Changelog

在 0.7 版本加入.

cli

用于注册此对象的CLI命令的Click命令组。这些命令可从 flask 一旦发现了应用程序并注册了蓝图,就可以执行命令。

config

配置字典为 Config . 它的行为与普通字典完全相同,但支持从文件加载配置的其他方法。

config_class

Config 的别名

context_processor(f)

注册模板上下文处理器函数。这些函数在呈现模板之前运行。返回的dict的键被添加为模板中可用的变量。

这在APP和BluePrint对象上都可用。在应用程序上使用时,会为每个呈现的模板调用此函数。当在蓝图上使用时,从蓝图的视图呈现的模板将被调用。要注册蓝图并影响每个模板,请使用 Blueprint.app_context_processor()

参数:

f (T_template_context_processor) --

返回类型:

T_template_context_processor

create_global_jinja_loader()

为jinja2环境创建加载程序。可用于仅覆盖加载程序并保持其余部分不变。不鼓励重写此函数。相反,应该重写:meth: ' jinja_loader '函数。

全局加载器在应用程序的加载器和各个蓝图之间进行调度。

Changelog

在 0.7 版本加入.

返回类型:

DispatchingJinjaLoader

create_jinja_environment()

创建基于 jinja_options 以及应用程序中与Jinja相关的各种方法。改变 jinja_options 以后就没有效果了。还向环境中添加烧瓶相关的全局变量和过滤器。

Changelog

在 0.11 版本发生变更: Environment.auto_reload 依据 TEMPLATES_AUTO_RELOAD 配置选项设置。

在 0.5 版本加入.

返回类型:

Environment

create_url_adapter(request)

为给定请求创建URL适配器。URL适配器是在尚未设置请求上下文的位置创建的,因此显式传递请求。

Changelog

在 1.0 版本发生变更: SERVER_NAME 不再隐式启用子域匹配。相反使用 subdomain_matching

在 0.9 版本发生变更: 当为应用程序情境创建URL适配器时,也可以在不使用请求对象的情况下调用它。

在 0.6 版本加入.

参数:

request (flask.wrappers.Request | None) --

返回类型:

werkzeug.routing.map.MapAdapter | None

property debug: bool

是否启用调试模式。使用时 flask run 要启动开发服务器,将为未处理的异常显示交互式调试器,并在代码更改时重新加载服务器。这映射到 DEBUG 配置密钥。如果设置得晚,它的行为可能不会像预期的那样。

在生产环境中部署时不启用调试模式。

默认: False

delete(rule, **options)

快捷键 route() 使用 methods=["DELETE"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

dispatch_request()

是否发送请求。匹配URL并返回视图或错误处理程序的返回值。这不必是响应对象。要将返回值转换为正确的响应对象,请调用 make_response() .

Changelog

在 0.7 版本发生变更: 这不再进行异常处理,此代码被移到新的 full_dispatch_request() .

返回类型:

ft.ResponseReturnValue

do_teardown_appcontext(exc=<object object>)

在弹出应用程序上下文之前调用。

处理请求时,应用程序上下文在请求上下文之后弹出。详见 do_teardown_request() .

这将调用所有用:meth: ' teardown_appcontext '装饰的函数。然后发送:data: ' appcontext_tearing_down '信号。

这是由:meth: ' AppContext.pop() <flask.ctx.appcontext.pop> '调用的。</flask.ctx.appcontext.pop>`.

Changelog

在 0.9 版本加入.

参数:

exc (BaseException | None) --

返回类型:

None

do_teardown_request(exc=<object object>)

在发送请求并返回响应之后调用,就在弹出请求上下文之前。

这将调用所有用 teardown_request()Blueprint.teardown_request() 函数,如果蓝图处理了请求。最后,发送 request_tearing_down 信号。

这是由 RequestContext.pop() 在测试期间可能会延迟,以保持对资源的访问。

参数:

exc (BaseException | None) -- 调度请求时引发未处理的异常。如果未通过,则从当前异常信息中检测到。传递给每个拆卸函数。

返回类型:

None

Changelog

在 0.9 版本发生变更: 增加了 exc 参数。

endpoint(endpoint)

修饰一个视图函数,以便为给定的终结点注册它。在添加规则时不使用 view_func 使用 add_url_rule()

app.add_url_rule("/ex", endpoint="example")

@app.endpoint("example")
def example():
    ...
参数:

endpoint (str) -- 要与视图函数关联的终结点名称。

返回类型:

Callable[[F], F]

ensure_sync(func)

确保该函数对于WSGI工作者是同步的。平地 def 函数按原样返回。 async def 函数被包装为运行并等待响应。

重写此方法以更改应用程序运行异步视图的方式。

Changelog

在 2.0 版本加入.

参数:

func (Callable) --

返回类型:

Callable

error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]

已注册错误处理程序的数据结构,格式为 {scope: {code: {class: handler}}} 。这个 scope 键是处理程序处于活动状态的蓝图的名称,或者 None 对于所有请求。这个 code Key是的HTTP状态代码 HTTPException ,或 None 对于其他例外情况。最里面的字典将异常类映射到处理程序函数。

请使用 errorhandler() 装饰者注册错误处理程序。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

errorhandler(code_or_exception)

注册函数以按代码或异常类处理错误。

用于注册给定错误代码的函数的修饰符。例子::

@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404

您还可以为任意异常注册处理程序:

@app.errorhandler(DatabaseError)
def special_exception_handler(error):
    return 'Database connection failed', 500

这在APP和BluePrint对象上都可用。当在应用程序上使用时,它可以处理每个请求中的错误。在蓝图上使用时,它可以处理蓝图处理的请求中的错误。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_errorhandler()

Changelog

在 0.7 版本加入: 使用 register_error_handler() 而不是直接修改 error_handler_spec, 用于应用程序范围的错误处理程序。

在 0.7 版本加入: 现在还可以另外注册自定义异常类型,这些类型不必是 HTTPException 类。

参数:

code_or_exception (type[Exception] | int) -- 作为处理程序的整数或任意异常的代码

返回类型:

Callable[[T_error_handler], T_error_handler]

extensions: dict

扩展可以存储应用程序特定状态的位置。例如,这是一个扩展可以存储数据库引擎和类似东西的地方。

密钥必须与扩展模块的名称匹配。例如,如果在 flask_foo, 密钥是 'foo' .

Changelog

在 0.7 版本加入.

full_dispatch_request()

发送请求,除此之外,还执行请求的预处理和后处理以及HTTP异常捕获和错误处理。

Changelog

在 0.7 版本加入.

返回类型:

Response

get(rule, **options)

快捷键 route() 使用 methods=["GET"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

get_send_file_max_age(filename)

使用者 send_file() 要确定 max_age 给定文件路径的缓存值(如果未传递)。

默认情况下,该函数返回 SEND_FILE_MAX_AGE_DEFAULT 从的配置 current_app 。该默认为 None ,它告诉浏览器使用条件请求而不是定时缓存,后者通常更可取。

注意:这是Flask类中相同方法的副本。

Changelog

在 2.0 版本发生变更: 默认配置为 None 而不是12小时。

在 0.9 版本加入.

参数:

filename (str | None) --

返回类型:

int | None

handle_exception(e)

处理一个与错误处理程序没有关联的异常,或者是从错误处理程序引发的异常。这总是导致500 InternalServerError .

总是发送 got_request_exception 信号。

如果 PROPAGATE_EXCEPTIONSTrue ,则会重新引发错误,以便调试器可以显示该错误。否则,将记录原始异常,并引发 InternalServerError 是返回的。

如果注册了错误处理程序 InternalServerError500 ,它将被使用。为了保持一致性,处理程序将始终接收 InternalServerError . 原始未处理的异常可用作 e.original_exception .

Changelog

在 1.1.0 版本发生变更: 总是通过考试 InternalServerError 实例,设置 original_exception 对于未处理的错误。

在 1.1.0 版本发生变更: after_request 即使在没有处理程序的情况下,默认的500响应也会完成函数和其他终结。

在 0.3 版本加入.

参数:

e (Exception) --

返回类型:

Response

handle_http_exception(e)

处理HTTP异常。默认情况下,这将调用注册的错误处理程序,并返回到将异常作为响应返回。

Changelog

在 1.0.3 版本发生变更: RoutingException 不会传递给错误处理程序。

在 1.0 版本发生变更: 异常由代码查找 and 由MRO,所以 HTTPException 子类可以使用基类的通用处理程序来处理 HTTPException

在 0.3 版本加入.

参数:

e (HTTPException) --

返回类型:

HTTPException | ft.ResponseReturnValue

handle_url_build_error(error, endpoint, values)

呼叫者 url_for() 如果一个 BuildError 被抚养长大。如果这返回一个值,则它将由 url_for ,否则将重新引发错误。

中的每个函数 url_build_error_handlers 用来调用 errorendpointvalues 。如果函数返回 None 或者引发一个 BuildError ,它被跳过。否则,它的返回值由 url_for

参数:
  • error (BuildError) -- 主动者 BuildError 正在处理中。

  • endpoint (str) -- 正在构建的终结点。

  • values (dict[str, Any]) -- 传递给的关键字参数 url_for

返回类型:

str

handle_user_exception(e)

每当发生应处理的异常时,就会调用此方法。一个特例是 HTTPException 它被转发到 handle_http_exception() 方法。此函数将返回响应值或使用相同的回溯重新引发异常。

Changelog

在 1.0 版本发生变更: 从请求数据引发的关键错误,如 form 在调试模式下显示坏键,而不是一般的坏请求消息。

在 0.7 版本加入.

参数:

e (Exception) --

返回类型:

HTTPException | ft.ResponseReturnValue

property has_static_folder: bool

True 如果 static_folder 已经设置好了。

Changelog

在 0.5 版本加入.

import_name

此对象所属的包或模块的名称。一旦构造函数设置了它,就不要更改它。

inject_url_defaults(endpoint, values)

将给定端点的URL默认值直接插入传递的值字典中。这在内部使用,并在URL构建时自动调用。

Changelog

在 0.7 版本加入.

参数:
  • endpoint (str) --

  • values (dict) --

返回类型:

None

instance_path

保留实例文件夹的路径。

Changelog

在 0.8 版本加入.

iter_blueprints()

按注册顺序迭代所有蓝图。

Changelog

在 0.11 版本加入.

返回类型:

t.ValuesView[Blueprint]

property jinja_env: Environment

用于加载模板的Jinja环境。

环境是在第一次访问此属性时创建的。改变 jinja_options 之后就没有效果了。

jinja_environment

Environment 的别名

property jinja_loader: jinja2.loaders.FileSystemLoader | None

此对象模板的JJJA加载器。默认情况下,这是一个类 jinja2.loaders.FileSystemLoadertemplate_folder 如果它已设置。

Changelog

在 0.5 版本加入.

jinja_options: dict = {}

中传递给Jinja环境的选项 create_jinja_environment() . 在创建环境后更改这些选项(访问 jinja_env )不会有任何效果。

Changelog

在 1.1.0 版本发生变更: 这是一个 dict 而不是 ImmutableDict 以便于配置。

json: JSONProvider

提供对JSON方法的访问。中的函数 flask.json 将在应用程序上下文处于活动状态时调用此提供程序上的方法。用于处理JSON请求和响应。

的一个实例 json_provider_class 。可以通过更改子类上的该属性或随后为该属性赋值来自定义。

默认情况下, DefaultJSONProvider ,使用的是Python的内置 json 类库。不同的提供者可以使用不同的JSON库。

Changelog

在 2.2 版本加入.

json_provider_class

DefaultJSONProvider 的别名

log_exception(exc_info)

记录异常。这会被 handle_exception() 调用,如果在调用处理程序之前禁用调试。默认实现将异常作为错误记录在 logger

Changelog

在 0.8 版本加入.

参数:

exc_info (tuple[type, BaseException, traceback] | tuple[None, None, None]) --

返回类型:

None

property logger: Logger

标准的 Python Logger 对于应用程序,与同名 name .

在调试模式下,记录器的 level 将被设置为 DEBUG .

如果没有配置处理程序,将添加默认处理程序。见 日志 更多信息。

Changelog

在 1.1.0 版本发生变更: 记录器的名称与 name 而不是硬编码 "flask.app" .

在 1.0.0 版本发生变更: 简化了行为。记录器始终命名为 "flask.app" . 级别仅在配置期间设置,不检查 app.debug 每一次。只使用一种格式,根据 app.debug . 不删除任何处理程序,只有在未配置任何处理程序的情况下才添加处理程序。

在 0.3 版本加入.

make_aborter()

创建要分配到的对象 aborter 。该对象由调用 flask.abort() 引发HTTP错误,也可以直接调用。

默认情况下,这将创建 aborter_class ,它缺省为 werkzeug.exceptions.Aborter

Changelog

在 2.2 版本加入.

返回类型:

Aborter

make_config(instance_relative=False)

用于由flask构造函数创建config属性。这个 instance_relative 参数是从flask的构造函数传入的(此处名为 instance_relative_config) 并指示配置是相对于实例路径还是应用程序的根路径。

Changelog

在 0.8 版本加入.

参数:

instance_relative (bool) --

返回类型:

Config

make_default_options_response()

调用此方法以创建默认 OPTIONS 反应。这可以通过子类化来更改,以更改 OPTIONS 响应。

Changelog

在 0.7 版本加入.

返回类型:

Response

make_response(rv)

将视图函数的返回值转换为 response_class .

参数:

rv (ft.ResponseReturnValue) -- View函数的返回值。View函数必须返回响应。归来 None ,或视图结束而不返回,则不允许。允许以下类型的 view_rvstr 创建一个响应对象,将编码为UTF-8的字符串作为正文。 bytes 创建一个以字节为主体的响应对象。 dict 一本词典,在归还之前要经过整理。 list 一份名单,在退回之前要经过确认。 generatoriterator 一台返回的发电机 strbytes 作为回应进行流传输。 tuple 要么 (body, status, headers)(body, status) ,或 (body, headers) ,在哪里 body 这里允许的任何其他类型, status 是字符串或整数,并且 headers 是一本词典或一份 (key, value) 元组。如果 body 是一种 response_class 实例, status 覆盖现有值并 headers 是扩展的。 response_class 该对象原封不动地返回。其他 Response 对象被强制设置为的 response_classcallable() 该函数被作为WSGI应用程序调用。结果用于创建响应对象。

返回类型:

Response

Changelog

在 2.2 版本发生变更: 生成器将被转换为流响应。列表将被转换为JSON响应。

在 1.1 版本发生变更: DICT将被转换为JSON响应。

在 0.9 版本发生变更: 以前,元组被解释为响应对象的参数。

make_shell_context()

返回此应用程序的交互式shell的shell上下文。这将运行所有注册的shell上下文处理器。

Changelog

在 0.11 版本加入.

返回类型:

dict

property name: str

应用程序的名称。这通常是导入名,如果导入名是main,则与从运行文件猜测的不同。当flask需要应用程序的名称时,此名称用作显示名称。它可以设置和重写以更改值。

Changelog

在 0.8 版本加入.

open_instance_resource(resource, mode='rb')

从应用程序的实例文件夹打开资源( instance_path )。其他工作方式如 open_resource() . 也可以打开实例资源进行写入。

参数:
  • resource (str) -- 资源的名称。要访问子文件夹中的资源,请使用正斜杠作为分隔符。

  • mode (str) -- 资源文件打开模式,默认为“rb”。

返回类型:

IO

open_resource(resource, mode='rb')

打开相对于的资源文件 root_path 用来阅读的。

例如,如果文件 schema.sql 紧挨着文件 app.py 凡. Flask 应用程序已定义,可以使用以下命令打开:

with app.open_resource("schema.sql") as f:
    conn.executescript(f.read())
参数:
  • resource (str) -- 资源相对于的路径 root_path

  • mode (str) -- 在此模式下打开文件。仅支持读取,有效值为“r”(或“rt”)和“rb”。

返回类型:

IO

注意:这是Flask类中相同方法的副本。

patch(rule, **options)

快捷键 route() 使用 methods=["PATCH"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

permanent_session_lifetime

A timedelta 用于去设置永久会话的到期日期。默认值是31天,这使得一个永久会话可以存活大约一个月。

也可以从配置中使用 PERMANENT_SESSION_LIFETIME 配置密钥。默认为 timedelta(days=31)

post(rule, **options)

快捷键 route() 使用 methods=["POST"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

preprocess_request()

在发送请求之前调用。调用有应用程序和当前蓝图(如果有)已注册的 url_value_preprocessors 。然后调用带有应用程序和蓝图并注册的 before_request_funcs

如果有的话, before_request() handler返回一个非none值,该值的处理方式与它是视图中的返回值一样,并停止进一步的请求处理。

返回类型:

ft.ResponseReturnValue | None

process_response(response)

可以重写,以便在将响应对象发送到wsgi服务器之前对其进行修改。默认情况下,这将调用 after_request() 装饰函数。

Changelog

在 0.5 版本发生变更: 从flask 0.5开始,以注册的相反顺序调用请求执行后注册的函数。

参数:

response (Response) -- 一个 response_class 对象。

返回:

新的响应对象或相同的对象必须是 response_class .

返回类型:

Response

put(rule, **options)

快捷键 route() 使用 methods=["PUT"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

redirect(location, code=302)

创建重定向响应对象。

这是由调用的 flask.redirect() ,也可以直接调用。

参数:
  • location (str) -- 要重定向到的URL。

  • code (int) -- 重定向的状态代码。

返回类型:

BaseResponse

Changelog

在 2.2 版本加入: flask.redirect ,它调用此方法。

register_blueprint(blueprint, **options)

注册A Blueprint 在应用程序上。传递给此方法的关键字参数将重写蓝图上设置的默认值。

在记录在应用程序的 blueprints 的蓝图后,调用蓝图的 register() 方法.

参数:
  • blueprint (Blueprint) -- 要注册的蓝图。

  • url_prefix -- 蓝图路由将以这个作为前缀。

  • subdomain -- 蓝图路由将在此子域上匹配。

  • url_defaults -- 蓝图路由将使用这些默认值作为视图参数。

  • options (t.Any) -- 其他关键字参数传递给 BlueprintSetupState . 它们可以在 record() 回调。

返回类型:

None

Changelog

在 2.0.1 版本发生变更: 这个 name 选项可用于更改蓝图注册时使用的(前带点的)名称。这允许使用唯一的名称多次注册相同的蓝图 url_for

在 0.7 版本加入.

register_error_handler(code_or_exception, f)

将函数附加到 errorhandler() 更直接用于非修饰程序的修饰程序。

Changelog

在 0.7 版本加入.

参数:
返回类型:

None

request_class

Request 的别名

request_context(environ)

创建一个 RequestContext 表示WSGi环境。使用A with 阻止推送上下文,这将使 request 指向这个请求。

详见:doc:/reqcontext .

通常,您不应该从自己的代码中调用它。当处理请求时,请求环境会被:meth:wsgi_app`自动推送,所以使用 :meth:`test_request_context 创建环境和上下文。

参数:

environ (dict) -- wsgi环境

返回类型:

RequestContext

response_class

Response 的别名

root_path

文件系统上包的绝对路径。用于查找包中包含的资源。

route(rule, **options)

修饰一个视图函数,用给定的URL规则和选项注册它。打电话 add_url_rule() ,其中有关于实现的更多细节。

@app.route("/")
def index():
    return "Hello, World!"

看见 URL路由注册

路径的端点名称默认为查看函数的名称,如果 endpoint 参数未传递。

这个 methods 参数默认为 ["GET"]HEADOPTIONS 是自动添加的。

参数:
  • rule (str) -- URL规则字符串。

  • options (Any) -- 额外的选项传递给 Rule 对象。

返回类型:

Callable[[T_route], T_route]

run(host=None, port=None, debug=None, load_dotenv=True, **options)

在本地开发服务器上运行应用程序。

不要使用 run() 在生产环境中。它不是为了满足生产服务器的安全和性能要求。相反,请参见 部署到生产环境 以获得WSGI服务器建议。

如果 debug 设置了标志,服务器将自动重新加载代码更改,并在发生异常时显示调试器。

如果要在调试模式下运行应用程序,但禁用交互式调试器上的代码执行,则可以通过 use_evalex=False 作为参数。这将保持调试器的回溯屏幕处于活动状态,但禁用代码执行。

不建议在自动重新加载的开发中使用此函数,因为它受到严重支持。相反,您应该使用 flask 命令行脚本 run 支持。

牢记

除非处于调试模式,否则Flask将使用通用错误页禁止任何服务器错误。因此,为了在不重新加载代码的情况下仅启用交互式调试器,必须调用具有 debug=Trueuse_reloader=False 的:meth:run . 设置 use_debuggerTrue, 如果不处于调试模式,则不会捕获任何异常,因为不会捕获任何异常。

参数:
  • host (str | None) -- 要侦听的主机名。设置为 '0.0.0.0' 使服务器也可以在外部使用。默认为 '127.0.0.1' 或者``SERVER_NAME``配置变量中的主机(如果存在)。

  • port (int | None) -- web服务器的端口。默认为 5000 或在 SERVER_NAME 配置变中量定义的端口(如果存在)。

  • debug (bool | None) -- 如果给定,启用或禁用调试模式。见 debug .

  • load_dotenv (bool) -- 加载最近的 .env.flaskenv 用于设置环境变量的文件。也会将工作目录更改为包含在被找到的第一个文件的目录。

  • options (Any) -- 要转发到基础Werkzeug服务器的选项。更多信息见 werkzeug.serving.run_simple()

返回类型:

None

Changelog

在 1.0 版本发生变更: 如果安装,python-dotenv将用于加载来自:file:.env`和:file:.flaskenv`文件的环境变量。

这个 FLASK_DEBUG 环境变量将覆盖 debug

默认情况下启用线程模式。

在 0.10 版本发生变更: 现在从``SERVER_NAME``变量中选择默认端口。

secret_key

如果设置了密钥,则加密组件可以使用它来签署cookie和其他内容。例如,当您想使用安全cookie时,将其设置为复杂的随机值。

也可以从配置中使用 SECRET_KEY 配置密钥。默认为 None .

select_jinja_autoescape(filename)

返回 True 对于给定的模板名,如果自动转义应该是活动的。如果没有给定模板名,则返回 True.

Changelog

在 2.2 版本发生变更: 自动转义现在默认情况下为启用 .svg 档案。

在 0.5 版本加入.

参数:

filename (str) --

返回类型:

bool

send_static_file(filename)

用于从提供文件的查看功能 static_folder 。路径将在以下位置为该视图自动注册 static_url_path 如果 static_folder 已经设置好了。

注意:这是Flask类中相同方法的副本。

Changelog

在 0.5 版本加入.

参数:

filename (str) --

返回类型:

Response

session_interface: SessionInterface = <flask.sessions.SecureCookieSessionInterface object>

要使用的会话接口。默认情况下 :在这里使用class:`~flask.sessions.SecureCookieSessionInterface`

Changelog

在 0.8 版本加入.

shell_context_processor(f)

注册shell上下文处理器函数。

Changelog

在 0.11 版本加入.

参数:

f (T_shell_context_processor) --

返回类型:

T_shell_context_processor

shell_context_processors: list[ft.ShellContextProcessorCallable]

创建shell情境时应运行的shell上下文处理器函数的列表。

Changelog

在 0.11 版本加入.

should_ignore_error(error)

调用这个函数是为了确定在拆卸系统中是否应该忽略错误。如果此函数返回 True 则不会向拆卸处理程序传递错误。

Changelog

在 0.10 版本加入.

参数:

error (BaseException | None) --

返回类型:

bool

property static_folder: str | None

配置的静态文件夹的绝对路径。 None 如果未设置静态文件夹。

property static_url_path: str | None

静态路由可从中访问的URL前缀。

如果在init期间没有配置它,它将从 static_folder .

teardown_appcontext(f)

注册要在弹出应用程序上下文时调用的函数。应用程序上下文通常在每个请求的请求上下文之后、在CLI命令结束时或在手动推送的上下文结束之后弹出。

with app.app_context():
    ...

with 数据块退出(或 ctx.pop() 调用),则恰好在应用程序上下文处于非活动状态之前调用tearDown函数。因为请求上下文通常还管理应用程序上下文,所以当您弹出请求上下文时也会调用它。

当由于未处理的异常而调用TearDown函数时,将传递一个错误对象。如果一个 errorhandler() 注册后,它将处理异常,而拆卸将不会接收到异常。

TearDown函数必须避免引发异常。如果它们执行可能失败代码,则必须用一个 try/except 阻止并记录任何错误。

拆解函数的返回值将被忽略。

Changelog

在 0.9 版本加入.

参数:

f (T_teardown) --

返回类型:

T_teardown

teardown_appcontext_funcs: list[ft.TeardownCallable]

销毁应用程序上下文时调用的函数列表。因为如果请求结束,应用程序上下文也会被破坏,所以这是存储与数据库断开连接的代码的地方。

Changelog

在 0.9 版本加入.

teardown_request(f)

注册一个在弹出请求上下文时要调用的函数。这通常发生在每个请求的末尾,但也可以在测试期间手动推送上下文。

with app.test_request_context():
    ...

with 数据块退出(或 ctx.pop() 调用),则恰好在请求上下文处于非活动状态之前调用tearDown函数。

当由于未处理的异常而调用TearDown函数时,将传递一个错误对象。如果一个 errorhandler() 注册后,它将处理异常,而拆卸将不会接收到异常。

TearDown函数必须避免引发异常。如果它们执行可能失败代码,则必须用一个 try/except 阻止并记录任何错误。

拆解函数的返回值将被忽略。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求后执行。在蓝图上使用时,它在蓝图处理的每个请求之后执行。要使用蓝图注册并在每次请求后执行,请使用 Blueprint.teardown_app_request()

参数:

f (T_teardown) --

返回类型:

T_teardown

teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]

即使引发异常也要在每个请求结束时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 teardown_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]

呈现模板时要调用以传递额外上下文值的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 context_processor() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

template_filter(name=None)

用于注册自定义模板筛选器的装饰器。可以指定筛选器的名称,否则将使用函数名。例子::

@app.template_filter()
def reverse(s):
    return s[::-1]
参数:

name (str | None) -- 筛选器的可选名称,否则将使用函数名。

返回类型:

Callable[[T_template_filter], T_template_filter]

template_folder

模板文件夹的路径,相对于 root_path ,以添加到模板加载器。 None 如果不应添加模板。

template_global(name=None)

用于注册自定义模板全局函数的修饰符。可以为全局函数指定名称,否则将使用函数名称。例子::

@app.template_global()
def double(n):
    return 2 * n
Changelog

在 0.10 版本加入.

参数:

name (str | None) -- 全局函数的可选名称,否则将使用函数名称。

返回类型:

Callable[[T_template_global], T_template_global]

template_test(name=None)

用于注册自定义模板测试的装饰器。您可以为测试指定一个名称,否则将使用函数名。例子::

@app.template_test()
def is_prime(n):
    if n == 2:
        return True
    for i in range(2, int(math.ceil(math.sqrt(n))) + 1):
        if n % i == 0:
            return False
    return True
Changelog

在 0.10 版本加入.

参数:

name (str | None) -- 测试的可选名称,否则将使用函数名。

返回类型:

Callable[[T_template_test], T_template_test]

test_cli_runner(**kwargs)

创建用于测试CLI命令的CLI运行程序。见 使用CLI运行器运行命令 .

返回的实例 test_cli_runner_class ,默认情况下 FlaskCliRunner . flask app对象作为第一个参数传递。

Changelog

在 1.0 版本加入.

参数:

kwargs (t.Any) --

返回类型:

FlaskCliRunner

test_cli_runner_class: type[FlaskCliRunner] | None = None

:class:~Click.testing.CliRunner`子类,默认情况下:class:`~flask.testing.FlaskCliRunner,用于:meth:test_cli_runner。 它的``__init__``方法应该将Flask app对象作为第一个参数。

Changelog

在 1.0 版本加入.

test_client(use_cookies=True, **kwargs)

为此应用程序创建一个测试客户端。有关单元测试的信息,请访问 测试Flask应用

请注意,如果要在应用程序代码中测试断言或异常,则必须设置“app.testing = True”以使异常传播到测试客户端。 否则,异常将由应用程序处理(对测试客户端不可见),并且AssertionError或其他异常的唯一指示将是对测试客户端的500状态代码响应。 请参阅:attr:`testing`属性。 例如::

app.testing = True
client = app.test_client()

测试客户端可以在 with 块将上下文关闭推迟到 with 块。如果要访问上下文局部变量以进行测试,这很有用:

with app.test_client() as c:
    rv = c.get('/?vodka=42')
    assert request.args['vodka'] == '42'

此外,还可以传递可选的关键字参数,然后将这些参数传递给应用程序的 test_client_class 构造函数。例如::

from flask.testing import FlaskClient

class CustomClient(FlaskClient):
    def __init__(self, *args, **kwargs):
        self._authentication = kwargs.pop("authentication")
        super(CustomClient,self).__init__( *args, **kwargs)

app.test_client_class = CustomClient
client = app.test_client(authentication='Basic ....')

更多信息见 FlaskClient

Changelog

在 0.11 版本发生变更: 添加了`** kwargs`以支持将其他关键字参数传递给构造函数:attr:test_client_class

在 0.7 版本加入: 添加了`use_cookies`参数以及通过设置:attr:`test_client_class`属性来覆盖要使用的客户端的能力。

在 0.4 版本发生变更: 为客户端增加了对``with``块使用的支持。

参数:
  • use_cookies (bool) --

  • kwargs (t.Any) --

返回类型:

FlaskClient

test_client_class: type[FlaskClient] | None = None

这个 test_client() 方法创建此测试客户端类的实例。默认为 FlaskClient

Changelog

在 0.7 版本加入.

test_request_context(*args, **kwargs)

创建一个 RequestContext 对于从给定值创建的wsgi环境。这在测试期间非常有用,您可能希望运行一个使用请求数据而不发送完整请求的函数。

详见:doc:/reqcontext .

使用``with``块来推送上下文,这将使:data:`request`指向创建环境的请求。:

with app.test_request_context(...):
    generate_report()

使用shell时,可能更容易手动推送和弹出上下文以避免缩进。:

ctx = app.test_request_context(...)
ctx.push()
...
ctx.pop()

采用与Werkzeug相同的参数:class:~werkzeug.test.EnvironBuilder,其中包含应用程序的一些默认值。 有关大多数可用参数,请参阅链接的Werkzeug文档。 此处列出了特定于Flask的行为。

参数:
  • path -- 正在请求的URL路径。

  • base_url -- 应用程序所在的基本URL,即“路径”相对于的路径。 如果没有给出,则建立自:data:PREFERRED_URL_SCHEMEsubdomain,:data:SERVER_NAME,和:data:APPLICATION_ROOT

  • subdomain -- 要附加到的子域名 SERVER_NAME .

  • url_scheme -- 使用方案而不是 PREFERRED_URL_SCHEME .

  • data -- 请求主体,可以是字符串,也可以是表单密钥和值的dict。

  • json -- 如果给定,则将其序列化为JSON并作为“data”传递。 还要将``content_type``默认为``application / json``。

  • args (Any) -- 其他位置参数传递给:class:~werkzeug.test.EnvironBuilder

  • kwargs (Any) -- 其他关键字参数传递给:class:~werkzeug.test.EnvironBuilder

返回类型:

RequestContext

testing

测试标志。 将其设置为“True”以启用Flask扩展的测试模式(以及将来可能还有Flask本身)。 例如,这可能会激活具有额外运行时成本的测试助手,默认情况下不应启用该成本助手。

如果启用了此选项,并且传播异常没有更改为默认值,则它是隐式启用的。

也可以从配置中使用 TESTING 配置密钥。默认为 False .

trap_http_exception(e)

检查是否应该捕获HTTP异常。 默认情况下,如果“TRAP_BAD_REQUEST_ERRORS”设置为“True”,则除了错误的请求键错误外,所有异常都会返回“False”。 如果``TRAP_HTTP_EXCEPTIONS``设置为``True``,它也会返回``True``。

对于视图函数引发的所有HTTP异常,都会调用此方法。 如果它为任何异常返回“True”,则不会调用此异常的错误处理程序,并且它在回溯中显示为常规异常。 这有助于调试隐式引发的HTTP异常。

Changelog

在 1.0 版本发生变更: 默认情况下,调试模式下不会捕获错误请求。

在 0.8 版本加入.

参数:

e (Exception) --

返回类型:

bool

update_template_context(context)

使用一些常用变量更新模板上下文。这会将请求、会话、配置和g注入模板上下文,以及模板上下文处理器想要注入的所有内容。注意,如果上下文处理器决定返回具有相同键的值,那么从0.6开始,上下文中的原始值将不会被重写。

参数:

context (dict) -- 作为字典的上下文,在适当的位置进行更新以添加额外的变量。

返回类型:

None

url_build_error_handlers: list[t.Callable[[Exception, str, dict[str, t.Any]], str]]

调用的函数的列表 handle_url_build_error() 什么时候 url_for() 引发了一个 BuildError 。每个函数都是用 errorendpointvalues 。如果函数返回 None 或者引发一个 BuildError ,它被跳过。否则,它的返回值由 url_for

Changelog

在 0.9 版本加入.

url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]

生成URL时要调用以修改关键字参数的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 url_defaults() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

url_defaults(f)

应用程序的所有视图函数的URL默认值的回调函数。 它使用端点和值调用,并应更新传递的值。

这在APP和BluePrint对象上都可用。在应用程序上使用时,每次请求都会调用它。当在蓝图上使用时,这是为蓝图处理的请求调用的。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_url_defaults()

参数:

f (T_url_defaults) --

返回类型:

T_url_defaults

url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)

使用给定值生成指向给定端点的URL。

这是由调用的 flask.url_for() ,也可以直接调用。

一个 endpoint 是URL规则的名称,通常使用 @app.route() ,并且通常与view函数同名。中定义的路线 Blueprint 将在设计图的名称前面加上一个分隔的 . 到终端。

在某些情况下,例如电子邮件,您希望URL包含方案和域,例如 https://example.com/hello 。当不在活动请求中时,默认情况下URL将是外部的,但这需要设置 SERVER_NAME 这样,Flask就知道要使用哪个域了。 APPLICATION_ROOTPREFERRED_URL_SCHEME 还应根据需要进行配置。此配置仅在不在活动请求中时使用。

函数可以用 url_defaults() 要在生成URL之前修改关键字参数,请执行以下操作。

如果构建因某种原因失败,例如未知的终结点或不正确的值,则应用程序的 handle_url_build_error() 方法被调用。如果返回字符串,则返回该字符串,否则为 BuildError 都被养大了。

参数:
  • endpoint (str) -- 与要生成的URL关联的终结点名称。如果这以一个 . ,将使用当前的设计图名称(如果有)。

  • _anchor (str | None) -- 如果给出了,则将此附加为 #anchor 添加到URL。

  • _method (str | None) -- 如果给定,则为终结点生成与此方法关联的URL。

  • _scheme (str | None) -- 如果给定,URL将具有此方案(如果它是外部的)。

  • _external (bool | None) -- 如果给定,则首选URL为内部URL(False)或要求其为外部URL(True)。外部URL包括方案和域。当不在活动请求中时,默认情况下URL是外部的。

  • values (Any) -- 用于URL规则的变量部分的值。未知键作为查询字符串参数追加,如下所示 ?a=b&c=d

返回类型:

str

Changelog

在 2.2 版本加入: flask.url_for ,它调用此方法。

url_map

:class:`~werkzeug.routing.Map`用于此实例。 您可以在创建类之后但在连接任何路由之前使用它来更改路由转换器。 例::

from werkzeug.routing import BaseConverter

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split(',')
    def to_url(self, values):
        return ','.join(super(ListConverter, self).to_url(value)
                        for value in values)

app = Flask(__name__)
app.url_map.converters['list'] = ListConverter
url_map_class

Map 的别名

url_rule_class

Rule 的别名

url_value_preprocessor(f)

为应用程序中的所有视图函数注册URL值预处理器函数。 这些函数将在:meth:`before_request`函数之前调用。

该函数可以在将匹配的URL传递给视图之前修改这些值。 例如,这可用于弹出公共语言代码值并将其放在“g`”中,而不是将其传递给每个视图。

函数将传递端点名称和值dict。返回值将被忽略。

这在APP和BluePrint对象上都可用。在应用程序上使用时,每次请求都会调用它。当在蓝图上使用时,这是为蓝图处理的请求调用的。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_url_value_preprocessor()

参数:

f (T_url_value_preprocessor) --

返回类型:

T_url_value_preprocessor

url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]

要调用以修改传递给视图函数的关键字参数的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 url_value_preprocessor() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

view_functions: dict[str, t.Callable]

将端点名称映射到视图函数的字典。

若要注册视图函数,请使用 route() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

wsgi_app(environ, start_response)

实际的WSGI应用程序。 这没有在:meth:`__ call__`中实现,因此可以应用中间件而不会丢失对app对象的引用。 而不是这样做:

app = MyMiddleware(app)

最好改为这样做:

app.wsgi_app = MyMiddleware(app.wsgi_app)

然后您仍然有原始的应用程序对象,可以继续对其调用方法。

Changelog

在 0.7 版本发生变更: 即使发生未处理的错误,也会调用请求和应用上下文的拆卸事件。根据调度期间发生错误的时间,可能不会调用其他事件。见 回调和错误 .

参数:
  • environ (dict) -- WSGi环境。

  • start_response (Callable) -- 接受状态代码、头列表和可选异常上下文以启动响应的可调用文件。

返回类型:

Any

蓝图对象

class flask.Blueprint(name, import_name, static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, cli_group=<object object>)
参数:
  • name (str) --

  • import_name (str) --

  • static_folder (str | os.PathLike | None) --

  • static_url_path (str | None) --

  • template_folder (str | os.PathLike | None) --

  • url_prefix (str | None) --

  • subdomain (str | None) --

  • url_defaults (dict | None) --

  • root_path (str | None) --

  • cli_group (str | None) --

add_app_template_filter(f, name=None)

注册模板筛选器,该筛选器在应用程序呈现的任何模板中可用。其工作原理类似于 app_template_filter() 装饰师。相当于 Flask.add_template_filter()

参数:
  • name (str | None) -- 筛选器的可选名称,否则将使用函数名。

  • f (Callable[[...], Any]) --

返回类型:

None

add_app_template_global(f, name=None)

注册一个全局模板,该模板可在应用程序呈现的任何模板中使用。其工作原理类似于 app_template_global() 装饰师。相当于 Flask.add_template_global()

Changelog

在 0.10 版本加入.

参数:
  • name (str | None) -- 全局的可选名称,否则将使用函数名。

  • f (Callable[[...], Any]) --

返回类型:

None

add_app_template_test(f, name=None)

注册模板测试,该测试可在应用程序呈现的任何模板中使用。其工作原理类似于 app_template_test() 装饰师。相当于 Flask.add_template_test()

Changelog

在 0.10 版本加入.

参数:
  • name (str | None) -- 测试的可选名称,否则将使用函数名。

  • f (Callable[[...], bool]) --

返回类型:

None

add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)

在蓝图中注册URL规则。看见 Flask.add_url_rule() 以获取完整的文档。

URL规则以蓝图的URL前缀作为前缀。终结点名称,与一起使用 url_for() ,以蓝图的名称作为前缀。

参数:
  • rule (str) --

  • endpoint (str | None) --

  • view_func (ft.RouteCallable | None) --

  • provide_automatic_options (bool | None) --

  • options (t.Any) --

返回类型:

None

after_app_request(f)

喜欢 after_request() ,但在每个请求之后,不仅仅是蓝图处理的那些请求。相当于 Flask.after_request()

参数:

f (T_after_request) --

返回类型:

T_after_request

after_request(f)

注册一个函数,以便在每次请求此对象后运行。

该函数与响应对象一起调用,并且必须返回响应对象。这允许函数在发送响应之前修改或替换响应。

如果函数引发异常,则任何剩余的 after_request 不会调用函数。因此,这不应用于必须执行的操作,例如关闭资源。使用 teardown_request() 就因为这个。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求后执行。在蓝图上使用时,它在蓝图处理的每个请求之后执行。要使用蓝图注册并在每次请求后执行,请使用 Blueprint.after_app_request()

参数:

f (T_after_request) --

返回类型:

T_after_request

after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable]]

要在每个请求结束时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 after_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

app_context_processor(f)

喜欢 context_processor() ,而是由每个视图呈现的模板,而不仅仅是蓝图。相当于 Flask.context_processor()

参数:

f (T_template_context_processor) --

返回类型:

T_template_context_processor

app_errorhandler(code)

喜欢 errorhandler() ,但对于每个请求,不仅仅是蓝图处理的那些请求。相当于 Flask.errorhandler()

参数:

code (type[Exception] | int) --

返回类型:

Callable[[T_error_handler], T_error_handler]

app_template_filter(name=None)

注册模板筛选器,该筛选器在应用程序呈现的任何模板中可用。相当于 Flask.template_filter()

参数:

name (str | None) -- 筛选器的可选名称,否则将使用函数名。

返回类型:

Callable[[T_template_filter], T_template_filter]

app_template_global(name=None)

注册一个全局模板,该模板可在应用程序呈现的任何模板中使用。相当于 Flask.template_global()

Changelog

在 0.10 版本加入.

参数:

name (str | None) -- 全局的可选名称,否则将使用函数名。

返回类型:

Callable[[T_template_global], T_template_global]

app_template_test(name=None)

注册模板测试,该测试可在应用程序呈现的任何模板中使用。相当于 Flask.template_test()

Changelog

在 0.10 版本加入.

参数:

name (str | None) -- 测试的可选名称,否则将使用函数名。

返回类型:

Callable[[T_template_test], T_template_test]

app_url_defaults(f)

喜欢 url_defaults() ,但对于每个请求,不仅仅是蓝图处理的那些请求。相当于 Flask.url_defaults()

参数:

f (T_url_defaults) --

返回类型:

T_url_defaults

app_url_value_preprocessor(f)

喜欢 url_value_preprocessor() ,但对于每个请求,不仅仅是蓝图处理的那些请求。相当于 Flask.url_value_preprocessor()

参数:

f (T_url_value_preprocessor) --

返回类型:

T_url_value_preprocessor

before_app_request(f)

喜欢 before_request() ,但在每次请求之前,不仅是蓝图处理的那些请求。相当于 Flask.before_request()

参数:

f (T_before_request) --

返回类型:

T_before_request

before_request(f)

注册一个要在每个请求之前运行的函数。

例如,这可以用于打开数据库连接,或者从会话加载登录用户。

@app.before_request
def load_user():
    if "user_id" in session:
        g.user = db.session.get(session["user_id"])

将在没有任何参数的情况下调用该函数。如果它返回非``None``值,则将该值当作从视图返回的值进行处理,并停止进一步的请求处理。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求之前执行。在蓝图上使用时,它在蓝图处理的每个请求之前执行。要使用蓝图注册并在每次请求之前执行,请使用 Blueprint.before_app_request()

参数:

f (T_before_request) --

返回类型:

T_before_request

before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]

要在每个请求开始时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 before_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

cli

用于注册此对象的CLI命令的Click命令组。这些命令可从 flask 一旦发现了应用程序并注册了蓝图,就可以执行命令。

context_processor(f)

注册模板上下文处理器函数。这些函数在呈现模板之前运行。返回的dict的键被添加为模板中可用的变量。

这在APP和BluePrint对象上都可用。在应用程序上使用时,会为每个呈现的模板调用此函数。当在蓝图上使用时,从蓝图的视图呈现的模板将被调用。要注册蓝图并影响每个模板,请使用 Blueprint.app_context_processor()

参数:

f (T_template_context_processor) --

返回类型:

T_template_context_processor

delete(rule, **options)

快捷键 route() 使用 methods=["DELETE"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

endpoint(endpoint)

修饰一个视图函数,以便为给定的终结点注册它。在添加规则时不使用 view_func 使用 add_url_rule()

app.add_url_rule("/ex", endpoint="example")

@app.endpoint("example")
def example():
    ...
参数:

endpoint (str) -- 要与视图函数关联的终结点名称。

返回类型:

Callable[[F], F]

error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]

已注册错误处理程序的数据结构,格式为 {scope: {code: {class: handler}}} 。这个 scope 键是处理程序处于活动状态的蓝图的名称,或者 None 对于所有请求。这个 code Key是的HTTP状态代码 HTTPException ,或 None 对于其他例外情况。最里面的字典将异常类映射到处理程序函数。

请使用 errorhandler() 装饰者注册错误处理程序。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

errorhandler(code_or_exception)

注册函数以按代码或异常类处理错误。

用于注册给定错误代码的函数的修饰符。例子::

@app.errorhandler(404)
def page_not_found(error):
    return 'This page does not exist', 404

您还可以为任意异常注册处理程序:

@app.errorhandler(DatabaseError)
def special_exception_handler(error):
    return 'Database connection failed', 500

这在APP和BluePrint对象上都可用。当在应用程序上使用时,它可以处理每个请求中的错误。在蓝图上使用时,它可以处理蓝图处理的请求中的错误。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_errorhandler()

Changelog

在 0.7 版本加入: 使用 register_error_handler() 而不是直接修改 error_handler_spec, 用于应用程序范围的错误处理程序。

在 0.7 版本加入: 现在还可以另外注册自定义异常类型,这些类型不必是 HTTPException 类。

参数:

code_or_exception (type[Exception] | int) -- 作为处理程序的整数或任意异常的代码

返回类型:

Callable[[T_error_handler], T_error_handler]

get(rule, **options)

快捷键 route() 使用 methods=["GET"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

get_send_file_max_age(filename)

使用者 send_file() 要确定 max_age 给定文件路径的缓存值(如果未传递)。

默认情况下,该函数返回 SEND_FILE_MAX_AGE_DEFAULT 从的配置 current_app 。该默认为 None ,它告诉浏览器使用条件请求而不是定时缓存,后者通常更可取。

注意:这是Flask类中相同方法的副本。

Changelog

在 2.0 版本发生变更: 默认配置为 None 而不是12小时。

在 0.9 版本加入.

参数:

filename (str | None) --

返回类型:

int | None

property has_static_folder: bool

True 如果 static_folder 已经设置好了。

Changelog

在 0.5 版本加入.

import_name

此对象所属的包或模块的名称。一旦构造函数设置了它,就不要更改它。

property jinja_loader: jinja2.loaders.FileSystemLoader | None

此对象模板的JJJA加载器。默认情况下,这是一个类 jinja2.loaders.FileSystemLoadertemplate_folder 如果它已设置。

Changelog

在 0.5 版本加入.

make_setup_state(app, options, first_registration=False)

创建 BlueprintSetupState() 对象的实例,稍后传递给注册回调函数。子类可以重写此项以返回安装状态的子类。

参数:
  • app (App) --

  • options (dict) --

  • first_registration (bool) --

返回类型:

BlueprintSetupState

open_resource(resource, mode='rb')

打开相对于的资源文件 root_path 用来阅读的。

例如,如果文件 schema.sql 紧挨着文件 app.py 凡. Flask 应用程序已定义,可以使用以下命令打开:

with app.open_resource("schema.sql") as f:
    conn.executescript(f.read())
参数:
  • resource (str) -- 资源相对于的路径 root_path

  • mode (str) -- 在此模式下打开文件。仅支持读取,有效值为“r”(或“rt”)和“rb”。

返回类型:

IO

注意:这是Flask类中相同方法的副本。

patch(rule, **options)

快捷键 route() 使用 methods=["PATCH"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

post(rule, **options)

快捷键 route() 使用 methods=["POST"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

put(rule, **options)

快捷键 route() 使用 methods=["PUT"]

Changelog

在 2.0 版本加入.

参数:
  • rule (str) --

  • options (Any) --

返回类型:

Callable[[T_route], T_route]

record(func)

注册在应用程序上注册蓝图时调用的函数。使用:meth:`make_setup_state`方法返回的state作为参数调用此函数。

参数:

func (Callable) --

返回类型:

None

record_once(func)

类似于:meth:record,但将函数包装在另一个函数中,该函数将确保仅调用一次函数。 如果蓝图在应用程序上第二次注册,则不会调用传递的函数。

参数:

func (Callable) --

返回类型:

None

register(app, options)

调用:meth:Flask.register_blueprint`来注册与应用程序一起在蓝图上注册的所有视图和回调。 创建一个:class:.BlueprintSetupState`并用它调用each:meth:`record`回调。

参数:
  • app (App) -- 正在注册此蓝图的应用程序。

  • options (dict) -- 关键字参数转发自 register_blueprint() .

返回类型:

None

Changelog

在 2.3 版本发生变更: 嵌套蓝图现在可以正确应用子域。

在 2.1 版本发生变更: 用相同的名称多次注册相同的设计图是错误的。

在 2.0.1 版本发生变更: 嵌套的蓝图使用其虚线名称进行注册。这使得同名的不同设计图可以嵌套在不同的位置。

在 2.0.1 版本发生变更: 这个 name 选项可用于更改蓝图注册时使用的(前带点的)名称。这允许使用唯一的名称多次注册相同的蓝图 url_for

register_blueprint(blueprint, **options)

注册a Blueprint 在这张蓝图上。传递给此方法的关键字参数将覆盖蓝图上设置的默认值。

Changelog

在 2.0.1 版本发生变更: 这个 name 选项可用于更改蓝图注册时使用的(前带点的)名称。这允许使用唯一的名称多次注册相同的蓝图 url_for

在 2.0 版本加入.

参数:
  • blueprint (Blueprint) --

  • options (Any) --

返回类型:

None

register_error_handler(code_or_exception, f)

将函数附加到 errorhandler() 更直接用于非修饰程序的修饰程序。

Changelog

在 0.7 版本加入.

参数:
返回类型:

None

root_path

文件系统上包的绝对路径。用于查找包中包含的资源。

route(rule, **options)

修饰一个视图函数,用给定的URL规则和选项注册它。打电话 add_url_rule() ,其中有关于实现的更多细节。

@app.route("/")
def index():
    return "Hello, World!"

看见 URL路由注册

路径的端点名称默认为查看函数的名称,如果 endpoint 参数未传递。

这个 methods 参数默认为 ["GET"]HEADOPTIONS 是自动添加的。

参数:
  • rule (str) -- URL规则字符串。

  • options (Any) -- 额外的选项传递给 Rule 对象。

返回类型:

Callable[[T_route], T_route]

send_static_file(filename)

用于从提供文件的查看功能 static_folder 。路径将在以下位置为该视图自动注册 static_url_path 如果 static_folder 已经设置好了。

注意:这是Flask类中相同方法的副本。

Changelog

在 0.5 版本加入.

参数:

filename (str) --

返回类型:

Response

property static_folder: str | None

配置的静态文件夹的绝对路径。 None 如果未设置静态文件夹。

property static_url_path: str | None

静态路由可从中访问的URL前缀。

如果在init期间没有配置它,它将从 static_folder .

teardown_app_request(f)

喜欢 teardown_request() ,但在每个请求之后,不仅仅是蓝图处理的那些请求。相当于 Flask.teardown_request()

参数:

f (T_teardown) --

返回类型:

T_teardown

teardown_request(f)

注册一个在弹出请求上下文时要调用的函数。这通常发生在每个请求的末尾,但也可以在测试期间手动推送上下文。

with app.test_request_context():
    ...

with 数据块退出(或 ctx.pop() 调用),则恰好在请求上下文处于非活动状态之前调用tearDown函数。

当由于未处理的异常而调用TearDown函数时,将传递一个错误对象。如果一个 errorhandler() 注册后,它将处理异常,而拆卸将不会接收到异常。

TearDown函数必须避免引发异常。如果它们执行可能失败代码,则必须用一个 try/except 阻止并记录任何错误。

拆解函数的返回值将被忽略。

这在APP和BluePrint对象上都可用。在应用程序上使用时,它会在每次请求后执行。在蓝图上使用时,它在蓝图处理的每个请求之后执行。要使用蓝图注册并在每次请求后执行,请使用 Blueprint.teardown_app_request()

参数:

f (T_teardown) --

返回类型:

T_teardown

teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]

即使引发异常也要在每个请求结束时调用的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 teardown_request() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]

呈现模板时要调用以传递额外上下文值的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 context_processor() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

template_folder

模板文件夹的路径,相对于 root_path ,以添加到模板加载器。 None 如果不应添加模板。

url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]

生成URL时要调用以修改关键字参数的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 url_defaults() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

url_defaults(f)

应用程序的所有视图函数的URL默认值的回调函数。 它使用端点和值调用,并应更新传递的值。

这在APP和BluePrint对象上都可用。在应用程序上使用时,每次请求都会调用它。当在蓝图上使用时,这是为蓝图处理的请求调用的。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_url_defaults()

参数:

f (T_url_defaults) --

返回类型:

T_url_defaults

url_value_preprocessor(f)

为应用程序中的所有视图函数注册URL值预处理器函数。 这些函数将在:meth:`before_request`函数之前调用。

该函数可以在将匹配的URL传递给视图之前修改这些值。 例如,这可用于弹出公共语言代码值并将其放在“g`”中,而不是将其传递给每个视图。

函数将传递端点名称和值dict。返回值将被忽略。

这在APP和BluePrint对象上都可用。在应用程序上使用时,每次请求都会调用它。当在蓝图上使用时,这是为蓝图处理的请求调用的。要使用蓝图注册并影响每个请求,请使用 Blueprint.app_url_value_preprocessor()

参数:

f (T_url_value_preprocessor) --

返回类型:

T_url_value_preprocessor

url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]

要调用以修改传递给视图函数的关键字参数的函数的数据结构,格式为 {scope: [functions]} 。这个 scope 键是为其激活功能的蓝图的名称,或 None 对于所有请求。

若要注册函数,请使用 url_value_preprocessor() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

view_functions: dict[str, t.Callable]

将端点名称映射到视图函数的字典。

若要注册视图函数,请使用 route() 装饰师。

该数据结构是内部的。不应直接修改,其格式可能随时更改。

传入请求数据

class flask.Request(environ, populate_request=True, shallow=False)

在flask中默认使用的请求对象。记住匹配的端点和视图参数。

它最终成为:class:~flask.request。 如果要替换使用的请求对象,可以将其子类化并将:attr:`~flask.Flask.request_class`设置为子类。

请求对象是一个:class:`~werkzeug.wrappers.Request`子类,它提供了Werkzeug定义的所有属性以及一些特定于Flask的属性。

参数:
  • environ (WSGIEnvironment) --

  • populate_request (bool) --

  • shallow (bool) --

property accept_charsets: CharsetAccept

此客户端支持的字符集列表 CharsetAccept 对象。

property accept_encodings: Accept

此客户端接受的编码列表。HTTP术语中的编码是压缩编码,如gzip。对于字符集,请看一下 accept_charset .

property accept_languages: LanguageAccept

此客户端接受的语言列表 LanguageAccept 对象。

property accept_mimetypes: MIMEAccept

此客户端支持的mimetype列表 MIMEAccept 对象。

access_control_request_headers

与飞行前请求一起发送,以指示哪些标头将与跨源请求一起发送。设置 access_control_allow_headers 以指示允许哪些标头。

access_control_request_method

与飞行前请求一起发送,以指示跨源请求将使用哪种方法。设置 access_control_allow_methods 在响应上指示允许哪些方法。

property access_route: list[str]

如果存在转发头,这是从客户端IP到最后一个代理服务器的所有IP地址的列表。

classmethod application(f)

将函数装饰为接受请求作为最后一个参数的响应程序。这就像 responder() 但函数作为最后一个参数传递给请求对象,请求对象将自动关闭:

@Request.application
def my_wsgi_app(request):
    return Response('Hello World!')

自werkzeug 0.14起,HTTP异常将自动捕获并转换为响应,而不是失败。

参数:

f (t.Callable[[Request], WSGIApplication]) -- 可装饰的WSGi

返回:

一个新的wsgi可调用

返回类型:

WSGIApplication

property args: MultiDict[str, str]

解析的URL参数(URL中问号后面的部分)。

默认情况下 ImmutableMultiDict 从该函数返回。这可以通过设置更改 parameter_storage_class 换一种类型。如果表单数据的顺序很重要,则可能需要这样做。

Changelog

在 2.3 版本发生变更: 无效字节保持百分比编码。

property authorization: werkzeug.datastructures.auth.Authorization | None

这个 Authorization 将标头分析为 Authorization 对象。 None 如果标头不存在,则。

Changelog

在 2.3 版本发生变更: Authorization 不再是一个 dict 。这个 token 为使用令牌而不是参数的身份验证方案添加了属性。

property base_url: str

喜欢 url 但没有查询字符串。

property blueprint: str | None

当前蓝图的注册名称。

这将是 None 如果终结点不是蓝图的一部分,或者如果URL匹配失败或尚未执行。

这不一定与创建蓝图时使用的名称匹配。它可能是嵌套的,或者用不同的名称注册。

property blueprints: list[str]

当前设计图的注册名称向上通过父设计图。

如果没有当前蓝图,或者URL匹配失败,这将是一个空列表。

Changelog

在 2.0.1 版本加入.

property cache_control: RequestCacheControl

传入缓存控制头的A RequestCacheControl 对象。

close()

关闭此请求对象的关联资源。这将显式关闭所有文件句柄。您还可以在WITH语句中使用请求对象,该语句将自动关闭它。

Changelog

在 0.9 版本加入.

返回类型:

None

content_encoding

内容编码实体标题字段用作媒体类型的修饰符。当存在时,它的值指示哪些附加内容编码已应用于实体体,因此必须应用哪些解码机制才能获得内容类型标题字段引用的媒体类型。

Changelog

在 0.9 版本加入.

property content_length: int | None

Content-Length实体标题字段以字节表示实体正文的大小,或者在Head方法的情况下,表示请求为get时发送的实体正文的大小。

content_md5

在RFC1864中定义的Content-MD5实体标题字段是实体主体的MD5摘要,目的是提供实体主体的端到端消息完整性检查(MIC)。(注意:MIC有助于检测在传输过程中实体的意外修改,但不能抵御恶意攻击。)

Changelog

在 0.9 版本加入.

content_type

Content-Type Entity Header字段表示发送给收件人的实体实体的媒体类型,如果是Head方法,则表示请求为get时本应发送的媒体类型。

property cookies: ImmutableMultiDict[str, str]

包含随请求一起传输的所有cookie的内容的A:class:dict

property data: bytes

从其读取的原始数据 stream 。如果请求表示表单数据,则将为空。

若要获取原始数据(即使它表示表单数据),请使用 get_data()

date

日期常规头字段表示消息的开始日期和时间,其语义与RFC822中的原始日期相同。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

dict_storage_class

ImmutableMultiDict 的别名

property endpoint: str | None

与请求URL匹配的终结点。

这将是 None 如果匹配失败或尚未执行。

这与此相结合 view_args 可用于重建相同的URL或修改后的URL。

environ: WSGIEnvironment

包含来自WSGI服务器的HTTP头和信息的WSGI环境。

property files: ImmutableMultiDict[str, FileStorage]

MultiDict 包含所有上载文件的对象。每个密钥 files 名字来自 <input type="file" name=""> . 每一个在 files 的值是Werkzeug FileStorage 对象。

它的行为基本上类似于您从Python中了解的标准文件对象,不同之处在于它还具有 save() 可以将文件存储在文件系统上的函数。

注意 files 仅当请求方法是post、put或patch以及 <form> 发布到请求中的 enctype="multipart/form-data" . 否则它将是空的。

有关所用数据结构的更多详细信息的文档,见 MultiDict / FileStorage

property form: ImmutableMultiDict[str, str]

窗体参数。默认情况下 ImmutableMultiDict 从该函数返回。这可以通过设置更改 parameter_storage_class 换一种类型。如果表单数据的顺序很重要,则可能需要这样做。

请记住,文件上载不会在这里结束,而是在 files 属性。

Changelog

在 0.9 版本发生变更: 在werkzeug 0.9之前,这只包含POST和PUT请求的表单数据。

form_data_parser_class

FormDataParser 的别名

classmethod from_values(*args, **kwargs)

根据提供的值创建新的请求对象。如果给定environ,则会从中填充缺少的值。当需要模拟来自URL的请求时,此方法对小脚本很有用。不要将此方法用于单元测试,有一个功能完整的客户端对象( Client )允许创建多部分请求、对cookie的支持等。

它接受与:class:`~werkzeug.test.EnvironBuilder`相同的选项。

Changelog

在 0.5 版本发生变更: 此方法现在接受与以下相同的参数:class:~werkzeug.test.EnvironBuilder。 因此,environ`参数现在称为`environ_overrides

返回:

请求对象

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Request

property full_path: str

请求的路径,包括查询字符串。

get_data(cache=True, as_text=False, parse_form_data=False)

这将从客户端将缓冲的传入数据读取到一个字节对象中。默认情况下,这是缓存的,但可以通过设置 cacheFalse

通常,不首先检查内容长度就调用此方法是一个坏主意,因为客户机可能会发送几十兆字节或更多的字节来导致服务器内存问题。

注意,如果表单数据已经被解析,那么这个方法不会返回任何内容,因为表单数据解析不会像这个方法那样缓存数据。隐式调用表单数据分析函数集 parse_form_dataTrue. 完成后,如果表单分析器处理数据,则此方法的返回值将为空字符串。这通常是不必要的,因为如果缓存了整个数据(这是默认值),表单分析器将使用缓存的数据来解析表单数据。在调用此方法之前,请注意首先检查内容长度,以避免耗尽服务器内存。

如果 as_text 设置为 True 返回值将是已解码的字符串。

Changelog

在 0.9 版本加入.

参数:
  • cache (bool) --

  • as_text (bool) --

  • parse_form_data (bool) --

返回类型:

bytes | str

get_json(force=False, silent=False, cache=True)

解析 data 作为JSON。

如果MIMETYPE未指示JSON (application/json ,见 is_json ),否则解析失败, on_json_loading_failed() 并将其返回值用作返回值。默认情况下,这将引发415不支持的媒体类型。

参数:
  • force (bool) -- 忽略mimetype并始终尝试解析json。

  • silent (bool) -- 使MIMETYPE和分析错误静默,并返回 None 取而代之的是。

  • cache (bool) -- 存储解析后的JSON以返回以进行后续调用。

返回类型:

Any | None

Changelog

在 2.3 版本发生变更: 引发415错误,而不是400。

在 2.1 版本发生变更: 如果内容类型不正确,则引发400错误。

headers

随请求一起接收的标头。

property host: str

向其发出请求的主机名,如果是非标准的,则包括端口。经过验证 trusted_hosts

property host_url: str

仅请求URL方案和主机。

property if_match: ETags

包含中所有etag的对象 If-Match 标题。

返回类型:

ETags

property if_modified_since: datetime.datetime | None

被解析的 If-Modified-Since 标头作为DateTime对象。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

property if_none_match: ETags

包含`If-None-Match`标头中所有etags的对象。

返回类型:

ETags

property if_range: IfRange

被解析的 If-Range 标题。

Changelog

在 2.0 版本发生变更: IfRange.date 支持时区。

在 0.7 版本加入.

property if_unmodified_since: datetime.datetime | None

被解析的 If-Unmodified-Since 标头作为DateTime对象。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

input_stream

未经任何安全检查的原始WSGI输入流。

这是危险的使用。它不会阻止无限的溪流或阅读过去 content_lengthmax_content_length

使用 stream 取而代之的是。

property is_json: bool

检查mimetype是否指示json数据,application/jsonapplication/*+json .

is_multiprocess

如果应用程序由生成多个进程的WSGI服务器提供服务,则为“True”的布尔值。

is_multithread

如果应用程序由多线程WSGI服务器提供,则为“True”的布尔值。

is_run_once

如果应用程序在进程生命周期中只执行一次,则布尔值为“True”。 例如,这就是CGI的情况,但不能保证执行只发生一次。

property is_secure: bool

True 如果请求是使用安全协议(HTTPS或WSS)发出的。

property json: Any | None

解析后的JSON数据如果 mimetype 表示JSON (application/json ,见 is_json )。

调用 get_json() 使用默认参数。

如果请求内容类型不是 application/json ,这将引发415不支持的媒体类型错误。

Changelog

在 2.3 版本发生变更: 引发415错误,而不是400。

在 2.1 版本发生变更: 如果内容类型不正确,则引发400错误。

list_storage_class

ImmutableList 的别名

make_form_data_parser()

创建表单数据解析器。 使用一些参数实例化:attr:form_data_parser_class

Changelog

在 0.8 版本加入.

返回类型:

FormDataParser

property max_content_length: int | None

“MAX_CONTENT_LENGTH”配置密钥的只读视图。

max_form_memory_size: int | None = None

表单域的最大大小。这将被转发到表单数据解析功能 (parse_form_data() )。设置时,并设置 formfiles 属性,并且内存中用于POST数据的数据长于指定值a RequestEntityTooLarge 引发异常。

Changelog

在 0.5 版本加入.

max_form_parts = 1000

要分析的多部分部件的最大数量,传递给 form_data_parser_class 。分析包含超过此数量的部分的表单数据会引发 RequestEntityTooLarge

Changelog

在 2.2.3 版本加入.

max_forwards

Max-Forwards请求头字段提供了一种机制,其中包含跟踪和选项方法,以限制可以将请求转发到下一个入站服务器的代理或网关的数量。

method

发出请求时使用的方法,例如 GET

property mimetype: str

content_type ,但不带参数(例如,不带字符集、类型等)且始终为小写。例如,如果内容类型是``text / HTML; charset = utf-8``mimetype将是``'text / html'``

property mimetype_params: dict[str, str]

Mimetype参数为dict。例如,如果内容类型为 text/html; charset=utf-8 参数则是 {{'charset': 'utf-8'}} .

on_json_loading_failed(e)

调用If get_json() 失败并且不会被静默。

如果此方法返回值,则将其用作 get_json() 。默认实现引发 BadRequest

参数:

e (ValueError | None) -- 如果解析失败,这是一个例外。会是 None 如果内容类型不是 application/json

返回类型:

Any

Changelog

在 2.3 版本发生变更: 引发415错误,而不是400。

origin

发出请求的主机。设置 access_control_allow_origin 在响应中指明哪些来源是允许的。

parameter_storage_class

ImmutableMultiDict 的别名

path

URL后面的路径部分 root_path 。这是用于在应用程序内进行路由的路径。

property pragma: HeaderSet

Pragma general header字段用于包括可能应用于请求/响应链上的任何收件人的特定于实现的指令。所有pragma指令都从协议的角度指定可选行为;但是,有些系统可能要求该行为与指令一致。

query_string

URL中“?”之后的部分。这是原始值,使用 args 用于解析的值。

property range: werkzeug.datastructures.range.Range | None

解析 Range 标题。

Changelog

在 0.7 版本加入.

返回类型:

Range

referrer

Referer[sic]请求头字段允许客户机为服务器的利益指定从中获取请求URI的资源的地址(uri)(“referer”,尽管头字段拼写错误)。

remote_addr

发送请求的客户端的地址。

remote_user

如果服务器支持用户身份验证,并且脚本受保护,则此属性包含用户身份验证的用户名。

root_path

装载应用程序的前缀,不带尾部斜杠。 path 在这之后。

property root_url: str

请求URL方案、主机和根路径。这是访问应用程序的根目录。

routing_exception: Exception | None = None

如果匹配URL失败,这是将作为请求处理的一部分引发/引发的异常。这通常是 NotFound 例外或类似的事情。

scheme

请求使用的协议的URL方案,例如 httpswss

property script_root: str

的别名 self.root_pathenviron["SCRIPT_ROOT"] 没有尾随的斜杠。

server

服务器的地址。 (host, port)(path, None) 对于Unix套接字,或 None 如果不知道的话。

shallow: bool

在创建请求对象时设置。如果 True ,则从请求正文中读取将导致 RuntimeException 。有助于防止从中间件修改流。

property stream: IO[bytes]

带有安全检查的WSGI输入流。此流只能使用一次。

使用 get_data() 以获取字节或文本形式的完整数据。这个 data 属性仅在它们不表示表单数据时才包含完整字节。这个 form 属性将在这种情况下包含已分析的表单数据。

不像 input_stream ,这条小溪防止无限的小溪或阅读过去 content_lengthmax_content_length

如果 max_content_length 已设置,则可以在以下情况下在流上强制执行 wsgi.input_terminated 已经设置好了。否则,返回空流。

如果在基础流(如太大的文件或无限流)耗尽之前达到限制,则不能安全地读取流的其余内容。根据服务器对此的处理方式,客户端可能会显示“连接重置”失败,而不是看到413响应。

Changelog

在 2.3 版本发生变更: 检查 max_content_length 先发制人,边读边读。

在 0.9 版本发生变更: 即使首先访问了表单解析,也始终设置流(但可能会被使用)。

trusted_hosts: list[str] | None = None

处理请求时的有效主机名。默认情况下,所有主机都是可信的,这意味着无论客户端说主机是什么,都将被接受。

因为 HostX-Forwarded-Host 恶意客户端可以将标头设置为任何值,建议设置此属性或在代理中实现类似的验证(如果应用程序在代理之后运行)。

Changelog

在 0.9 版本加入.

property url: str

包含方案、主机、根路径、路径和查询字符串的完整请求URL。

property url_root: str

的别名 root_url 。包含方案、主机和根路径的URL。例如, https://example.com/app/

url_rule: Rule | None = None

与请求匹配的内部URL规则。这有助于检查前后处理程序中允许URL使用哪些方法。( request.url_rule.methods )等等。尽管请求的方法对于URL规则无效,但有效列表在 routing_exception.valid_methods 相反(Werkzeug异常的一个属性 MethodNotAllowed )因为请求从未被内部绑定。

Changelog

在 0.6 版本加入.

property user_agent: UserAgent

用户代理。使用 user_agent.string 以获取标头值。集 user_agent_class 归于…的子类 UserAgent 以提供对其他属性或其他扩展数据的解析。

Changelog

在 2.1 版本发生变更: 内置解析器已删除。集 user_agent_class 到一个 UserAgent 子类从字符串中分析数据。

user_agent_class

UserAgent 的别名

property values: CombinedMultiDict[str, str]

这种A werkzeug.datastructures.CombinedMultiDict 结合了 argsform .

仅对于GET请求, args 存在,而不是 form

Changelog

在 2.0 版本发生变更: 仅对于GET请求, args 存在,而不是 form

view_args: dict[str, t.Any] | None = None

与请求匹配的视图参数的dict。如果匹配时发生异常,则 None .

property want_form_data_parsed: bool

True 如果请求方法携带内容。默认情况下,如果 Content-Type 已发送。

Changelog

在 0.8 版本加入.

flask.request

要访问传入请求数据,可以使用全局 request 对象。FASK为您解析传入的请求数据,并允许您通过该全局对象访问这些数据。在内部,如果您处于多线程环境中,Flask会确保您始终获得活动线程的正确数据。

这是一个代理。更多信息见 代理须知

请求对象是 Request .

响应对象

class flask.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)

在flask中默认使用的响应对象。工作方式与Werkzeug的响应对象类似,但默认情况下设置为具有HTML mimetype。通常你不需要自己创建这个对象,因为 make_response() 会帮你解决的。

如果要替换所用的响应对象,可以将其子类化并设置 response_class 到你的子类。

Changelog

在 1.0 版本发生变更: 与请求一样,在响应中添加了JSON支持。当测试将测试客户机响应数据作为JSON获取时,这很有用。

在 1.0 版本发生变更: 补充 max_cookie_size .

参数:
accept_ranges

这个 Accept-Ranges 标题。即使该名称表示支持多个值,它也只能是一个字符串标记。

这些价值观 'bytes''none' 是很常见的。

Changelog

在 0.7 版本加入.

property access_control_allow_credentials: bool

浏览器是否可以将凭据共享给JavaScript代码。作为印前检查请求的一部分,它指示是否可以在跨来源请求上使用凭据。

access_control_allow_headers

哪些报头可以与跨来源请求一起发送。

access_control_allow_methods

跨域请求可以使用哪些方法。

access_control_allow_origin

可能发出跨域请求的任何源点的源点或‘*’。

access_control_expose_headers

哪些头可以由浏览器共享给JavaScript代码。

access_control_max_age

可以缓存访问控制设置的最长期限(秒)。

add_etag(overwrite=False, weak=False)

如果还没有响应,则为当前响应添加一个ETag。

Changelog

在 2.0 版本发生变更: SHA-1用于生成该值。MD5在某些环境中可能不可用。

参数:
返回类型:

None

age

年龄响应头字段传达发送者对从原始服务器生成响应(或其重新验证)以来的时间量的估计。

年龄值是非负的十进制整数,以秒为单位表示时间。

property allow: HeaderSet

Allow Entity-Header字段列出了由请求URI标识的资源支持的方法集。此字段的目的是严格通知接收方与资源相关联的有效方法。405(不允许使用方法)响应中必须存在Allow标头字段。

autocorrect_location_header = False

如果重定向 Location Header是相对URL,使其成为绝对URL,包括方案和域。

Changelog

在 2.1 版本发生变更: 这在默认情况下是禁用的,因此响应将发送相对重定向。

在 0.8 版本加入.

automatically_set_content_length = True

如果可能,此响应对象是否应该自动设置内容长度标头?默认情况下,这是正确的。

Changelog

在 0.8 版本加入.

property cache_control: ResponseCacheControl

缓存控制通用报头字段用于指定请求/响应链上的所有缓存机制必须遵守的指令。

calculate_content_length()

返回内容长度(如果可用)或 None 否则的话。

返回类型:

int | None

call_on_close(func)

将函数添加到内部函数列表中,该函数应作为关闭响应的一部分进行调用。从0.7开始,此函数还返回传递的函数,因此可以将其用作修饰符。

Changelog

在 0.6 版本加入.

参数:

func (Callable[[], Any]) --

返回类型:

Callable[[], Any]

close()

如果可能,请关闭包装的响应。您还可以在With语句中使用该对象,该语句将自动关闭该对象。

Changelog

在 0.9 版本加入: 现在可以在With语句中使用。

返回类型:

None

content_encoding

内容编码实体标题字段用作媒体类型的修饰符。当存在时,它的值指示哪些附加内容编码已应用于实体体,因此必须应用哪些解码机制才能获得内容类型标题字段引用的媒体类型。

property content_language: HeaderSet

Content-Language Entity-Header字段描述封闭实体的目标受众的自然语言(S)。请注意,这可能并不等同于实体主体中使用的所有语言。

content_length

Content-Long Entity-Header字段指示发送给接收方的Entity-Body的大小,以八位字节的十进制数为单位,或者在Head方法的情况下,指示如果请求是GET则将发送的Entity-Body的大小。

content_location

当可以从与所请求资源的URI分开的位置访问包含在消息中的实体时,可以使用内容位置实体报头字段来提供该实体的资源位置。

content_md5

在RFC1864中定义的Content-MD5实体标题字段是实体主体的MD5摘要,目的是提供实体主体的端到端消息完整性检查(MIC)。(注意:MIC有助于检测在传输过程中实体的意外修改,但不能抵御恶意攻击。)

property content_range: ContentRange

这个 Content-Range 标头作为 ContentRange 对象。即使未设置标头也可用。

Changelog

在 0.7 版本加入.

property content_security_policy: ContentSecurityPolicy

这个 Content-Security-Policy 标头作为 ContentSecurityPolicy 对象。即使未设置标头也可用。

Content-Security-Policy标头添加了额外的安全层,以帮助检测和缓解某些类型的攻击。

property content_security_policy_report_only: ContentSecurityPolicy

这个 Content-Security-policy-report-only 标头作为 ContentSecurityPolicy 对象。即使未设置标头也可用。

Content-Security-Policy-Report-Only标头添加未强制执行但已报告的CSP策略,从而帮助检测特定类型的攻击。

content_type

Content-Type Entity Header字段表示发送给收件人的实体实体的媒体类型,如果是Head方法,则表示请求为get时本应发送的媒体类型。

cross_origin_embedder_policy

防止文档加载任何未显式授予文档权限的跨域资源。值必须是 werkzeug.http.COEP 枚举。

cross_origin_opener_policy

允许控制与跨来源文档共享浏览上下文组。值必须是 werkzeug.http.COOP 枚举。

property data: bytes | str

调用的描述符 get_data()set_data() .

date

日期常规头字段表示消息的开始日期和时间,其语义与RFC822中的原始日期相同。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

default_mimetype: str | None = 'text/html'

如果未提供任何类型,则为默认MIMETYPE。

default_status = 200

如果未提供,则为默认状态。

删除Cookie。如果key不存在,则以静默方式失败。

参数:
  • key (str) -- 要删除的Cookie的密钥(名称)。

  • path (str | None) -- 如果应该删除的Cookie被限制为路径,则必须在此处定义该路径。

  • domain (str | None) -- 如果应该删除的Cookie仅限于某个域,则必须在此处定义该域。

  • secure (bool) -- 如果 True ,该Cookie只能通过HTTPS获得。

  • httponly (bool) -- 不允许通过JavaScript访问Cookie。

  • samesite (str | None) -- 将Cookie的范围限制为仅附加到“同一站点”的请求。

返回类型:

None

direct_passthrough

将响应体作为WSGI迭代器直接传递。当正文是二进制文件或其他字节迭代器时,可以使用它来跳过一些不必要的检查。使用 send_file() 而不是手动设置。

expires

Expires Entity-Header字段提供响应被视为过期的日期/时间。过期的高速缓存条目通常不会由高速缓存返回。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

classmethod force_type(response, environ=None)

确保WSGI响应是当前类型的响应对象。Werkzeug将使用 Response 在内部的许多情况下,如例外。如果你打电话给 get_response() 在例外的情况下,您将得到一个常规的 Response 对象,即使您使用的是自定义子类。

此方法可以强制执行给定的响应类型,如果提供了环境,它还会将任意WSGI可调用转换为响应对象:

# convert a Werkzeug response object into an instance of the
# MyResponseClass subclass.
response = MyResponseClass.force_type(response)

# convert any WSGI application into a response object
response = MyResponseClass.force_type(response, environ)

如果您想要在主调度程序中对响应进行后处理并使用子类提供的功能,这尤其有用。

请记住,如果可能,这将修改适当的响应对象!

参数:
  • response (Response) -- 响应对象或WSGI应用程序。

  • environ (WSGIEnvironment | None) -- WSGI环境对象。

返回:

响应对象。

返回类型:

Response

freeze()

使响应对象准备好进行筛选。执行以下操作:

  • 将响应缓冲到列表中,忽略 implicity_sequence_conversiondirect_passthrough

  • 设置 Content-Length 标题。

  • 生成一个 ETag 标头(如果尚未设置)。

Changelog

在 2.1 版本发生变更: 删除了 no_etag 参数。

在 2.0 版本发生变更: 一个 ETag 始终添加标题。

在 0.6 版本发生变更: 这个 Content-Length 标头已设置。

返回类型:

None

classmethod from_app(app, environ, buffered=False)

从应用程序输出创建新的响应对象。如果将始终返回生成器的应用程序传递给它,则效果最好。有时应用程序可能会使用 write() 方法返回的Callable start_response 功能。这会尝试自动解决此类边缘情况。但是如果你没有得到预期的输出,你应该设置 bufferedTrue 它强制执行缓冲。

参数:
  • app (WSGIApplication) -- 要执行的WSGI应用程序。

  • environ (WSGIEnvironment) -- 要在其上执行的WSGI环境。

  • buffered (bool) -- 设置为 True 以强制缓冲。

返回:

响应对象。

返回类型:

Response

get_app_iter(environ)

返回给定环境的应用程序迭代器。根据请求方法和当前状态代码,返回值可能是空响应,而不是来自响应的响应。

如果请求方法为 HEAD 或者状态代码在HTTP规范需要空响应的范围内,则返回空的迭代数。

Changelog

在 0.6 版本加入.

参数:

environ (WSGIEnvironment) -- 请求的WSGI环境。

返回:

一个可迭代的响应。

返回类型:

t.Iterable[bytes]

get_data(as_text=False)

响应正文的字符串表示形式。无论何时调用此属性,都会对响应Iterable进行编码和扁平化。如果您传输大数据,这可能会导致不必要的行为。

可以通过设置禁用此行为 implicit_sequence_conversionFalse

如果 as_text 设置为 True 返回值将是已解码的字符串。

Changelog

在 0.9 版本加入.

参数:

as_text (bool) --

返回类型:

bytes | str

get_etag()

在表单中返回一个元组 (etag, is_weak) 。如果没有ETag,则返回值为 (None, None)

返回类型:

tuple[str, bool] | tuple[None, None]

get_json(force=False, silent=False)

解析 data 作为JSON。在测试过程中非常有用。

如果MIMETYPE未指示JSON (application/json ,见 is_json ),则返回 None

不像 Request.get_json() ,则不会缓存结果。

参数:
  • force (bool) -- 忽略mimetype并始终尝试解析json。

  • silent (bool) -- 静默分析错误并返回 None 相反。

返回类型:

Any | None

get_wsgi_headers(environ)

它会在响应启动之前自动调用,并返回针对给定环境修改过的标头。它从响应中返回标头的副本,并在必要时应用一些修改。

例如,Location标头(如果存在)与环境的根URL连接。此外,对于某些状态代码,此处的内容长度自动设置为零。

Changelog

在 0.6 版本发生变更: 在此之前,该函数被调用 fix_headers 并就地修改了响应对象。同样从0.6开始,位置和内容位置标头中的IRI都得到了正确处理。

同样从0.6开始,Werkzeug将尝试设置内容长度,如果它能够自己弄清楚的话。如果响应Iterable中的所有字符串都已编码,并且缓冲了Iterable,情况就是如此。

参数:

environ (WSGIEnvironment) -- 请求的WSGI环境。

返回:

返回一个新的 Headers 对象。

返回类型:

Headers

get_wsgi_response(environ)

以元组形式返回最终的WSGI响应。元组中的第一项是应用程序迭代器,第二项是状态,第三项是标头列表。返回的响应是专门为给定环境创建的。例如,如果WSGI环境中的请求方法是 'HEAD' 响应将为空,并且将只显示标头和状态代码。

Changelog

在 0.6 版本加入.

参数:

environ (WSGIEnvironment) -- 请求的WSGI环境。

返回:

一个 (app_iter, status, headers) 元组。

返回类型:

tuple[t.Iterable[bytes], str, list[tuple[str, str]]]

implicit_sequence_conversion = True

如果设置为 False 访问响应对象的属性不会尝试使用响应迭代器并将其转换为列表。

Changelog

在 0.6.2 版本加入: 该属性以前被称为 implicit_seqence_conversion 。(注意打字错误)。如果您确实使用了此功能,则必须调整代码以适应名称更改。

property is_json: bool

检查mimetype是否指示json数据,application/jsonapplication/*+json .

property is_sequence: bool

如果迭代器是缓冲的,则此属性将 True 。如果响应属性是列表或元组,则响应对象将考虑缓冲迭代器。

Changelog

在 0.6 版本加入.

property is_streamed: bool

如果响应是流的(响应不是具有长度信息的可迭代对象),则此属性为 True 。在这种情况下,Streamed意味着没有关于迭代次数的信息。这通常是 True 如果将生成器传递给响应对象。

这对于在应用某种不应对流响应进行的后期过滤之前进行检查非常有用。

iter_encoded()

ITER使用响应的编码进行编码的响应。如果响应对象作为WSGI应用程序调用,则此方法的返回值用作应用程序迭代器,除非 direct_passthrough 已被激活。

返回类型:

Iterator[bytes]

property json: Any | None

解析后的JSON数据如果 mimetype 表示JSON (application/json ,见 is_json )。

调用 get_json() 使用默认参数。

last_modified

Last-Modify Entity-Header字段指示源服务器认为该变体上次被修改的日期和时间。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

location

Location Response-Header字段用于将接收方重定向到请求URI之外的位置,以完成请求或标识新资源。

make_conditional(request_or_environ, accept_ranges=False, complete_length=None)

使响应以请求为条件。如果已经为响应定义了ETag,则此方法工作得最好。这个 add_etag 方法可以用来做到这一点。如果在不使用ETag的情况下调用,则只设置日期标头。

如果请求或环境中的请求方法不是GET或HEAD,则不执行任何操作。

为了在处理范围请求时获得最佳性能,建议您的响应数据对象实现 seekableseektell 方法,如 io.IOBase 。由返回的对象 wrap_file() 自动实现这些方法。

它不会删除响应的正文,因为这是 __call__() 功能会自动为我们完成。

返回SELF,这样您就可以 return resp.make_conditional(req) 但会就地修改对象。

参数:
  • request_or_environ (WSGIEnvironment | Request) -- 用于使响应具有条件的请求对象或WSGI环境。

  • accept_ranges (bool | str) -- 此参数指定 Accept-Ranges 标题。如果 False (默认),则不设置标头。如果 True ,它将被设置为 "bytes" 。如果它是一个字符串,它将使用此值。

  • complete_length (int | None) -- 将仅在有效的范围请求中使用。它将会设置 Content-Range 完整的长度值和计算 Content-Length 真正的价值。对于成功的范围请求完成,此参数是必需的。

引发:

RequestedRangeNotSatisfiable 如果 Range 无法分析或满足标头。

返回类型:

Response

Changelog

在 2.0 版本发生变更: 如果长度为0,则跳过范围处理,而不是引发416范围不满足的错误。

make_sequence()

转换列表中的响应迭代器。默认情况下,如果需要,此操作会自动发生。如果 implicit_sequence_conversion 则不会自动调用此方法,并且某些属性可能会引发异常。这也会对所有项目进行编码。

Changelog

在 0.6 版本加入.

返回类型:

None

只读视图 MAX_COOKIE_SIZE 配置密钥。

看见 max_cookie_size 在Werkzeug的文件里

property mimetype: str | None

Mimetype(不带字符集的内容类型等)

property mimetype_params: dict[str, str]

以dict表示的MIMETYPE参数。例如,如果内容类型为 text/html; charset=utf-8 参数应该是 {'charset': 'utf-8'}

Changelog

在 0.5 版本加入.

response: t.Iterable[str] | t.Iterable[bytes]

要作为WSGI可迭代变量发送的响应体。字符串或字节的列表表示固定长度的响应,任何其他可迭代的都是流响应。字符串以UTF-8格式编码为字节。

不要设置为纯字符串或字节,这将导致发送响应的效率非常低,因为它将一次迭代一个字节。

property retry_after: datetime.datetime | None

后重试响应报头字段可以与503(服务不可用)响应一起使用,以指示服务对于请求客户端预期不可用多长时间。

过期或日期前的时间,以秒为单位。

Changelog

在 2.0 版本发生变更: DateTime对象是时区感知的。

设置Cookie。

如果cookie头的大小超过 max_cookie_size ,但仍将设置标题。

参数:
  • key (str) -- 要设置的cookie的键(名称)。

  • value (str) -- cookie的值。

  • max_age (datetime.timedelta | int | None) -- 如果cookie应该只持续客户端的浏览器会话,那么应该是几秒钟,或者是“无”(默认)。

  • expires (str | datetime.datetime | int | float | None) -- 应该是 datetime 对象或Unix时间戳。

  • path (str | None) -- 将cookie限制为给定路径,默认情况下,它将跨越整个域。

  • domain (str | None) -- 如果您要设置跨域Cookie。例如, domain="example.com" 将设置域可读的Cookie www.example.comfoo.example.com 否则,Cookie将只被设置它的域读取。

  • secure (bool) -- 如果 True ,该Cookie只能通过HTTPS获得。

  • httponly (bool) -- 不允许通过JavaScript访问Cookie。

  • samesite (str | None) -- 将Cookie的范围限制为仅附加到“同一站点”的请求。

返回类型:

None

set_data(value)

设置一个新字符串作为响应。该值必须是字符串或字节。如果设置了字符串,则会将其编码为响应的字符集(默认情况下为utf-8)。

Changelog

在 0.9 版本加入.

参数:

value (bytes | str) --

返回类型:

None

set_etag(etag, weak=False)

设置ETag,并覆盖旧的ETag(如果有)。

参数:
返回类型:

None

property status: str

字符串形式的HTTP状态代码。

property status_code: int

以数字形式表示的HTTP状态代码。

property stream: ResponseStream

响应可作为只写流迭代。

property vary: HeaderSet

Variable字段值指示在响应新鲜时完全确定是否允许高速缓存使用该响应来回复后续请求而无需重新验证的一组请求报头字段。

property www_authenticate: WWWAuthenticate

这个 WWW-Authenticate 将标头分析为 WWWAuthenticate 对象。修改对象将修改标头值。

默认情况下不设置此标头。若要设置此标头,请分配 WWWAuthenticate 添加到此属性。

response.www_authenticate = WWWAuthenticate(
    "basic", {"realm": "Authentication Required"}
)

可以发送此标头的多个值,以便为客户端提供多个选项。分配一个列表以设置多个标头。但是,修改列表中的项不会自动更新标头值,访问此属性将只返回第一个值。

要取消设置此标头,请指定 None 或使用 del

Changelog

在 2.3 版本发生变更: 可以将此属性赋给以设置标头。可以分配一个列表来设置多个表头值。使用 del 要取消设置标题,请执行以下操作。

在 2.3 版本发生变更: WWWAuthenticate 不再是一个 dict 。这个 token 为使用令牌而不是参数的身份验证质询添加了属性。

会话

如果你已经设置 Flask.secret_key (或配置自 SECRET_KEY )您可以在烧瓶应用程序中使用会话。通过会话,可以记住从一个请求到另一个请求的信息。Flask这样做的方式是使用签名的cookie。用户可以查看会话内容,但除非知道密钥,否则无法对其进行修改,因此请确保将其设置为复杂且不可访问的内容。

要访问当前会话,可以使用 session 对象:

class flask.session

会话对象的工作方式与普通的dict非常相似,不同之处在于它跟踪修改。

这是一个代理。更多信息见 代理须知

以下属性很有趣:

new

如果会话是新的,则为“True”,否则为“False”。

modified

True 如果会话对象检测到修改。请注意,不会自动获取对可变结构的修改,在这种情况下,您必须将属性显式设置为 True 你自己。下面是一个例子::

# this change is not picked up because a mutable object (here
# a list) is changed.
session['objects'].append(42)
# so mark it as modified yourself
session.modified = True
permanent

如果设置为 True 会议的持续时间为 permanent_session_lifetime 几秒钟。默认值为31天。如果设置为 False (这是默认设置)当用户关闭浏览器时,会话将被删除。

会话接口

Changelog

在 0.8 版本加入.

会话界面提供了一种替换Flask正在使用的会话实现的简单方法。

class flask.sessions.SessionInterface

您必须实现的基本接口才能替换使用werkzeug的securecookie实现的默认会话接口。 您必须实现的唯一方法是:meth:open_session`和:meth:`save_session,其他方法都有有用的默认值,您无需更改。

由:meth:`open_session`方法返回的会话对象必须提供类似接口的字典以及来自:class:`SessionMixin`的属性和方法。 我们建议只是继承dict并添加mixin

class Session(dict, SessionMixin):
    pass

`make_null_session`用于创建一个会话,如果会话支持不能正常工作,因为某些要求未得到满足。 创建的默认:class:`NullSession`类将抱怨未设置密钥。

要替换应用程序上的会话接口,只需分配 flask.Flask.session_interface ::

app = Flask(__name__)
app.session_interface = MySessionInterface()

可以同时发送和处理具有相同会话的多个请求。在实现新的会话接口时,请考虑对后备存储区的读取或写入是否必须同步。对于每个请求的会话的打开或保存顺序没有保证,它将按照请求开始和结束处理的顺序发生。

Changelog

在 0.8 版本加入.

它的价值在于 Domain 会话Cookie上的参数。如果未设置,浏览器将仅将Cookie发送到设置Cookie的确切域。否则,它们也会将其发送到给定值的任何子域。

使用 SESSION_COOKIE_DOMAIN 配置。

Changelog

在 2.3 版本发生变更: 默认情况下不设置,不会回退到 SERVER_NAME

参数:

app (Flask) --

返回类型:

str | None

如果会话cookie应该是httponly,则返回True。 这当前只返回``SESSION_COOKIE_HTTPONLY`` config var的值。

参数:

app (Flask) --

返回类型:

bool

会话Cookie的名称。用法``app.config ["SESSION_COOKIE_NAME"] ``

参数:

app (Flask) --

返回类型:

str

返回cookie应该有效的路径。 默认实现使用来自``SESSION_COOKIE_PATH`` config var的值(如果已设置),并回退到``APPLICATION_ROOT``或使用``/如果它是``None

参数:

app (Flask) --

返回类型:

str

如果cookie应该使用``SameSite``属性,则返回``'Strict''Lax'``。 这当前只返回:data:`SESSION_COOKIE_SAMESITE`设置的值。

参数:

app (Flask) --

返回类型:

str

如果cookie应该是安全的,则返回true。当前只返回 SESSION_COOKIE_SECURE 设置。

参数:

app (Flask) --

返回类型:

bool

get_expiration_time(app, session)

返回会话到期日期或 None 如果会话链接到浏览器会话。默认实现现在返回+在应用程序上配置的永久会话生存期。

参数:
返回类型:

datetime | None

is_null_session(obj)

检查给定对象是否为空会话。不要求保存空会话。

这将检查对象是否是默认情况下的实例:attr:null_session_class

参数:

obj (object) --

返回类型:

bool

make_null_session(app)

如果由于配置错误而无法加载实际会话支持,则创建一个空会话,该会话充当替换对象。 这主要有助于用户体验,因为空会话的工作仍然是支持查找而不抱怨,但是通过有关失败的有用错误消息来回答修改。

默认情况下这将创建 null_session_class

参数:

app (Flask) --

返回类型:

NullSession

null_session_class

在这里:meth:`make_null_session`将查看在请求空会话时应该创建的类。 同样地,:meth:`is_null_session`方法将针对此类型执行类型检查。

NullSession 的别名

open_session(app, request)

它在每个请求的开头、在推送请求上下文之后、在匹配URL之前被调用。

它必须返回一个实现类字典接口的对象以及 SessionMixin 界面。

它会回来的 None 以指示加载以某种方式失败,但这不会立即成为错误。请求上下文将回退到使用 make_null_session() 在这种情况下。

参数:
返回类型:

SessionMixin | None

pickle_based = False

指示会话接口是否基于pickle的标志。这可由flask扩展用来决定如何处理会话对象。

Changelog

在 0.10 版本加入.

save_session(app, session, response)

在每个请求结束时,在生成响应之后,在删除请求上下文之前调用此函数。如果满足以下条件,则跳过该选项 is_null_session() 退货 True

参数:
返回类型:

None

由会话后端用于确定 Set-Cookie 应为此响应设置此会话cookie的头。如果会话已被修改,则设置cookie。如果会议是永久性的, SESSION_REFRESH_EACH_REQUEST config为true,始终设置cookie。

如果删除了会话,则通常跳过此检查。

Changelog

在 0.11 版本加入.

参数:
返回类型:

bool

class flask.sessions.SecureCookieSessionInterface

默认会话接口,通过:mod:`itsdangerous`模块将会话存储在已签名的cookie中。

static digest_method(string=b'', *, usedforsecurity=True)

用于签名的哈希函数。默认值是sha1

key_derivation = 'hmac'

它支持的危险密钥派生的名称。默认值为hmac。

open_session(app, request)

它在每个请求的开头、在推送请求上下文之后、在匹配URL之前被调用。

它必须返回一个实现类字典接口的对象以及 SessionMixin 界面。

它会回来的 None 以指示加载以某种方式失败,但这不会立即成为错误。请求上下文将回退到使用 make_null_session() 在这种情况下。

参数:
返回类型:

SecureCookieSession | None

salt = 'cookie-session'

在基于cookie的会话签名的密钥顶部应用的salt。

save_session(app, session, response)

在每个请求结束时,在生成响应之后,在删除请求上下文之前调用此函数。如果满足以下条件,则跳过该选项 is_null_session() 退货 True

参数:
返回类型:

None

serializer = <flask.json.tag.TaggedJSONSerializer object>

负载的python序列化程序。默认值是一个紧凑的JSON派生序列化程序,支持一些额外的Python类型,如日期时间对象或元组。

session_class

SecureCookieSession 的别名

class flask.sessions.SecureCookieSession(initial=None)

基于签名cookie的会话的基类。

此会话后端将设置 modifiedaccessed 属性。它不能可靠地跟踪会话是否是新的(而不是空的),因此:attr:new`仍然硬编码为``False`

参数:

initial (t.Any) --

accessed = False

头,允许缓存代理为不同的用户缓存不同的页面。

get(key, default=None)

如果键在字典中,则返回键的值,否则为默认值。

参数:
  • key (str) --

  • default (Any) --

返回类型:

Any

modified = False

更改数据时,将其设置为“True”。 仅跟踪会话字典本身; 如果会话包含可变数据(例如嵌套的dict),则在修改该数据时必须手动将其设置为“True”。 如果这是“True”,会话cookie将只写入响应。

setdefault(key, default=None)

如果关键字不在字典中,则插入值为默认值的关键字。

如果键在字典中,则返回键的值,否则为默认值。

参数:
  • key (str) --

  • default (Any) --

返回类型:

Any

class flask.sessions.NullSession(initial=None)

类,用于在会话不可用时生成更好的错误消息。仍允许对空会话进行只读访问,但设置失败。

参数:

initial (t.Any) --

clear() None.  Remove all items from D.
参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

NoReturn

pop(k[, d]) v, remove specified key and return the corresponding value.

如果找不到键,则返回默认值(如果给定);否则,引发KeyError。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

NoReturn

popitem(*args, **kwargs)

移除(键、值)对并将其作为二元组返回。

对按后进先出(LIFO)顺序返回。如果判定为空,则引发KeyError。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

NoReturn

setdefault(*args, **kwargs)

如果关键字不在字典中,则插入值为默认值的关键字。

如果键在字典中,则返回键的值,否则为默认值。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

NoReturn

update([E, ]**F) None.  Update D from dict/iterable E and F.

如果E存在并且具有.key()方法,则会这样做:for k in E:D [k] =E [k] 如果E存在并且缺少.key()方法,则会这样做:对于k,E:D中的v [k] =v在任何一种情况下,后跟:表示F:D中的k [k] =F [k]

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

NoReturn

class flask.sessions.SessionMixin

使用会话属性扩展基本字典。

accessed = True

有些实现可以检测会话数据何时被读取或写入,并在发生这种情况时设置它。mixin默认值硬编码为 True .

modified = True

有些实现可以检测到对会话的更改,并在发生这种情况时设置此更改。mixin默认值硬编码为 True .

property permanent: bool

这反映了dict中的``'_permanent'``密钥。

注意

这个 PERMANENT_SESSION_LIFETIME 配置可以是整数或 timedelta 。这个 permanent_session_lifetime 属性始终为 timedelta

测试客户端

class flask.testing.FlaskClient(*args, **kwargs)

工作方式与常规Werkzeug测试客户端类似,但了解Flask上下文,可以将请求上下文的清理推迟到 with 阻止。有关如何使用此类的一般信息,请参阅 werkzeug.test.Client

Changelog

在 0.12 版本发生变更: app.test_client() includes preset default environment, which can be set after instantiation of the app.test_client() object in client.environ_base.

中概述了基本用法 测试Flask应用 第二章。

参数:
  • args (t.Any) --

  • kwargs (t.Any) --

open(*args, buffered=False, follow_redirects=False, **kwargs)

从给定的参数生成环境字典,向使用它的应用程序发出请求,并返回响应。

参数:
  • args (t.Any) -- 已传递给 EnvironBuilder 创建请求的环境。如果传递单个参数,则它可以是现有的 EnvironBuilder 或者是关于环境的判决。

  • buffered (bool) -- 将应用程序返回的迭代器转换为列表。如果迭代器有一个 close() 方法时,它将被自动调用。

  • follow_redirects (bool) -- 发出其他请求以遵循HTTP重定向,直到返回非重定向状态。 TestResponse.history 列出了中间响应。

  • kwargs (t.Any) --

返回类型:

TestResponse

Changelog

在 2.1 版本发生变更: 删除了 as_tuple 参数。

在 2.0 版本发生变更: 调用时关闭请求输入流 response.close() 。自动关闭重定向的输入流。

在 0.5 版本发生变更: 如果在词典中将词典作为文件提供给 data 参数必须调用内容类型 content_type 而不是 mimetype 。这一更改是为了与 werkzeug.FileWrapper

在 0.5 版本发生变更: 添加了 follow_redirects 参数。

session_transaction(*args, **kwargs)

与A组合使用时 with 语句这将打开会话事务。这可用于修改测试客户机使用的会话。一旦 with 块被保留,会话被存储回。

with client.session_transaction() as session:
    session['value'] = 42

在内部,这是通过一个临时的测试请求上下文实现的,因为会话处理可能依赖于请求变量,所以该函数接受的参数与 test_request_context() 直接通过。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Generator[SessionMixin, None, None]

测试CLI转轮

class flask.testing.FlaskCliRunner(app, **kwargs)

A CliRunner 用于测试flask应用程序的CLI命令。通常使用 test_cli_runner() . 详见 使用CLI运行器运行命令 .

参数:
  • app (Flask) --

  • kwargs (t.Any) --

invoke(cli=None, args=None, **kwargs)

在独立环境中调用CLI命令。 完整的方法见 CliRunner.invoke <click.testing.CliRunner.invoke>`文件。例子见 :ref:`testing-cli()

如果没有给出``obj``参数,则传递一个实例:class:~flask.cli.ScriptInfo,它知道如何加载正在测试的Flask应用程序。

参数:
  • cli (Any) -- 要调用的命令对象。默认为应用程序的 cli 组。

  • args (Any) -- 用于调用命令的字符串列表。

  • kwargs (Any) --

返回:

Result 对象。

返回类型:

Any

应用程序全局

要仅将对一个请求有效的数据从一个函数共享到另一个函数,全局变量是不够的,因为它在线程化环境中会中断。FlASK为您提供了一个特殊的对象,以确保它只对活动请求有效,并且将为每个请求返回不同的值。简而言之:它做了正确的事情,就像它为 requestsession

flask.g

一个名称空间对象,可以在:doc:application context </ appcontext>`期间存储数据。 这是一个实例:attr:`Flask.app_ctx_globals_class,默认为:class:ctx._AppCtxGlobals

这是在请求期间存储资源的好地方。例如,一个 before_request 函数可以从会话ID加载用户对象,然后设置 g.user 将在查看函数中使用。

这是一个代理。更多信息见 代理须知

Changelog

在 0.10 版本发生变更: 绑定到应用程序上下文而不是请求上下文。

class flask.ctx._AppCtxGlobals

一个普通的对象。 用作在应用程序上下文中存储数据的命名空间。

创建应用上下文会自动创建此对象,该对象可用作 g 代理。

'key' in g

检查属性是否存在。

Changelog

在 0.10 版本加入.

iter(g)

返回属性名的迭代器。

Changelog

在 0.10 版本加入.

get(name, default=None)

按名称或默认值获取属性。如:meth:dict.get .

参数:
  • name (str) -- 要获取的属性的名称。

  • default (Any | None) -- 属性不存在时返回的值。

返回类型:

Any

Changelog

在 0.10 版本加入.

pop(name, default=<object object>)

按名称获取和删除属性。如 dict.pop() .

参数:
  • name (str) -- 要弹出的属性的名称。

  • default (Any) -- 值,以便在属性不存在时返回,而不是引发 KeyError

返回类型:

Any

Changelog

在 0.11 版本加入.

setdefault(name, default=None)

获取属性的值(如果存在),否则设置并返回默认值。如 dict.setdefault() .

参数:
  • name (str) -- 要获取的属性的名称。

  • default (Any) -- 该属性不存在时要设置并返回的值。

返回类型:

Any

Changelog

在 0.11 版本加入.

有用的函数和类

flask.current_app

处理当前请求的应用程序的代理。这对于在不需要导入应用程序的情况下访问应用程序非常有用,或者如果无法导入应用程序,例如在使用应用程序工厂模式或蓝图和扩展时。

这仅在推送:doc:application context </ appcontext>`时可用。 这在请求和CLI命令期间自动发生。 它可以用以下方法手动控制:meth:`~flask.Flask.app_context

这是一个代理。更多信息见 代理须知

flask.has_request_context()

如果您有代码想要测试请求上下文是否存在,那么可以使用此函数。例如,如果请求对象可用,您可能希望利用请求信息,但是如果请求对象不可用,则会自动失败。

class User(db.Model):

    def __init__(self, username, remote_addr=None):
        self.username = username
        if remote_addr is None and has_request_context():
            remote_addr = request.remote_addr
        self.remote_addr = remote_addr

或者,您也可以测试任何上下文绑定的对象(例如 requestg )对于真实性:

class User(db.Model):

    def __init__(self, username, remote_addr=None):
        self.username = username
        if remote_addr is None and request:
            remote_addr = request.remote_addr
        self.remote_addr = remote_addr
Changelog

在 0.7 版本加入.

返回类型:

bool

flask.copy_current_request_context(f)

一个helper函数,用于修饰函数以保留当前请求上下文。这在使用greenlets时非常有用。当函数被修饰时,就会创建一个请求上下文的副本,然后在调用函数时推送它。复制的会话也包含在当前会话中。

例子::

import gevent
from flask import copy_current_request_context

@app.route('/')
def index():
    @copy_current_request_context
    def do_some_work():
        # do some work here, it can access flask.request or
        # flask.session like you would otherwise in the view function.
        ...
    gevent.spawn(do_some_work)
    return 'Regular response'
Changelog

在 0.10 版本加入.

参数:

f (Callable) --

返回类型:

Callable

flask.has_app_context()

工作方式如下:func:`has_request_context`但适用于应用程序上下文。 您也可以对:data:`current_app`对象进行布尔检查。

Changelog

在 0.9 版本加入.

返回类型:

bool

flask.url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)

使用给定值生成指向给定端点的URL。

这需要活动的请求或应用程序上下文,并调用 current_app.url_for() 。有关完整文档,请参阅该方法。

参数:
  • endpoint (str) -- 与要生成的URL关联的终结点名称。如果这以一个 . ,将使用当前的设计图名称(如果有)。

  • _anchor (str | None) -- 如果给出了,则将此附加为 #anchor 添加到URL。

  • _method (str | None) -- 如果给定,则为终结点生成与此方法关联的URL。

  • _scheme (str | None) -- 如果给定,URL将具有此方案(如果它是外部的)。

  • _external (bool | None) -- 如果给定,则首选URL为内部URL(False)或要求其为外部URL(True)。外部URL包括方案和域。当不在活动请求中时,默认情况下URL是外部的。

  • values (Any) -- 用于URL规则的变量部分的值。未知键作为查询字符串参数追加,如下所示 ?a=b&c=d

返回类型:

str

Changelog

在 2.2 版本发生变更: 打电话 current_app.url_for ,允许应用程序覆盖该行为。

在 0.10 版本发生变更: 这个 _scheme 参数已添加。

在 0.9 版本发生变更: 这个 _anchor_method 添加了参数。

在 0.9 版本发生变更: 打电话 app.handle_url_build_error 在生成错误时。

flask.abort(code, *args, **kwargs)

举起一个 HTTPException 对于给定的状态代码。

如果 current_app 是可用的,它将调用其 aborter 对象,否则它将使用 werkzeug.exceptions.abort()

参数:
  • code (int | BaseResponse) -- 异常的状态代码,必须在中注册 app.aborter

  • args (t.Any) -- 传递给异常。

  • kwargs (t.Any) -- 传递给异常。

返回类型:

t.NoReturn

Changelog

在 2.2 版本加入: 打电话 current_app.aborter 如果可用,而不是始终使用Werkzeug的缺省值 abort

flask.redirect(location, code=302, Response=None)

创建重定向响应对象。

如果 current_app 是可用的,它将使用其 redirect() 方法,否则它将使用 werkzeug.utils.redirect()

参数:
  • location (str) -- 要重定向到的URL。

  • code (int) -- 重定向的状态代码。

  • Response (type[BaseResponse] | None) -- 要使用的响应类。在以下情况下不使用 current_app 是活动的,它使用 app.response_class

返回类型:

BaseResponse

Changelog

在 2.2 版本加入: 打电话 current_app.redirect 如果可用,而不是始终使用Werkzeug的缺省值 redirect

flask.make_response(*args)

有时需要在视图中设置额外的标题。由于视图不必返回响应对象,但可以返回一个值,该值由Flask本身转换为响应对象,因此向其添加头变得很困难。可以调用此函数,而不是使用返回,您将得到一个响应对象,您可以使用它来附加头。

如果视图看起来像这样,并且您想要添加新的标题:

def index():
    return render_template('index.html', foo=42)

你现在可以这样做了:

def index():
    response = make_response(render_template('index.html', foo=42))
    response.headers['X-Parachutes'] = 'parachutes are cool'
    return response

此函数接受可以从视图函数返回的参数。例如,这将创建一个带有404错误代码的响应:

response = make_response(render_template('not_found.html'), 404)

此函数的另一个用例是将视图函数的返回值强制转换为对视图修饰符有帮助的响应:

response = make_response(view_function())
response.headers['X-Parachutes'] = 'parachutes are cool'

此函数在内部执行以下操作:

  • 如果没有传递任何参数,它将创建一个新的响应参数

  • 如果传递了一个参数,则使用它调用:meth:flask.Flask.make_response

  • 如果传递了多个参数,则参数将作为元组传递给:meth:`flask.Flask.make_response`函数。

Changelog

在 0.6 版本加入.

参数:

args (t.Any) --

返回类型:

Response

flask.after_this_request(f)

在此请求之后执行函数。这对于修改响应对象很有用。函数被传递给响应对象,必须返回相同或新的响应对象。

例子::

@app.route('/')
def index():
    @after_this_request
    def add_header(response):
        response.headers['X-Foo'] = 'Parachute'
        return response
    return 'Hello World!'

如果视图函数以外的函数想要修改响应,则此选项更有用。例如,考虑一个装饰器,它希望在不将返回值转换为响应对象的情况下添加一些头。

Changelog

在 0.9 版本加入.

参数:

f (Union[Callable[[ResponseClass], ResponseClass], Callable[[ResponseClass], Awaitable[ResponseClass]]]) --

返回类型:

Union[Callable[[ResponseClass], ResponseClass], Callable[[ResponseClass], Awaitable[ResponseClass]]]

flask.send_file(path_or_file, mimetype=None, as_attachment=False, download_name=None, conditional=True, etag=True, last_modified=None, max_age=None)

将文件内容发送到客户端。

第一个参数可以是文件路径或类似文件的对象。路径在大多数情况下是首选的,因为Werkzeug可以管理文件并从路径中获取额外信息。传递类似文件的对象需要以二进制模式打开文件,并且在内存中使用 io.BytesIO

切勿传递用户提供的文件路径。假定该路径是可信的,因此用户可以手工创建一个路径来访问您不想要的文件。使用 send_from_directory() 从目录中安全地为用户请求的路径提供服务。

如果WSGI服务器将 file_wrapper 在……里面 environ ,否则使用Werkzeug的内置包装器。或者,如果HTTP服务器支持 X-Sendfile ,使用配置烧瓶 USE_X_SENDFILE = True 将告诉服务器发送给定的路径,这比在Python中读取它要高效得多。

参数:
  • path_or_file (os.PathLike | str | t.BinaryIO) -- 要发送的文件的路径,如果给定了相对路径,则为相对于当前工作目录的路径。或者,以二进制模式打开一个类似文件的对象。确保将文件指针定位到数据的开头。

  • mimetype (str | None) -- 要为文件发送的MIME类型。如果未提供,它将尝试从文件名中检测它。

  • as_attachment (bool) -- 向浏览器指示它应该提供保存文件而不是显示文件。

  • download_name (str | None) -- 浏览器在保存文件时将使用的默认名称。默认为传递的文件名。

  • conditional (bool) -- 基于请求标头启用条件响应和范围响应。需要传递文件路径,并且 environ

  • etag (bool | str) -- 计算文件的ETag,这需要传递文件路径。也可以是要改用的字符串。

  • last_modified (datetime | int | float | None) -- 上次为文件发送的修改时间,以秒为单位。如果未提供,它将尝试从文件路径检测它。

  • max_age (None | (int | t.Callable[[str | None], int | None])) -- 客户端应缓存文件的时间,以秒为单位。如果设置, Cache-Control 将会是 public ,否则它将是 no-cache 以首选条件缓存。

返回类型:

Response

Changelog

在 2.0 版本发生变更: download_name 取代了 attachment_filename 参数。如果 as_attachment=False ,它被通过了 Content-Disposition: inline 取而代之的是。

在 2.0 版本发生变更: max_age 取代了 cache_timeout 参数。 conditional 已启用,并且 max_age 默认情况下不设置。

在 2.0 版本发生变更: etag 取代了 add_etags 参数。它可以是要使用的字符串,而不是生成字符串。

在 2.0 版本发生变更: 传递一个类似文件的对象,该对象从 TextIOBase 将引发一个 ValueError 而不是发送空文件。

在 2.0 版本加入: 已将实现转移到Werkzeug。这现在是一个包装器,用于传递一些特定于烧瓶的参数。

在 1.1 版本发生变更: filename 可能是一种 PathLike 对象。

在 1.1 版本发生变更: 传递一个 BytesIO 对象支持范围请求。

在 1.0.3 版本发生变更: 为了更广泛地与WSGI服务器兼容,文件名用ASCII而不是拉丁1编码。

在 1.0 版本发生变更: 中指定的UTF-8文件名 RFC 2231 是受支持的。

在 0.12 版本发生变更: 不再从文件对象自动推断文件名。如果要使用自动MIME和ETag支持,请通过 filename_or_fpattachment_filename

在 0.12 版本发生变更: attachment_filename 是优先于 filename 用于MIME检测。

在 0.9 版本发生变更: cache_timeout 默认为 Flask.get_send_file_max_age()

在 0.7 版本发生变更: 删除了对类似文件对象的MIME猜测和ETag支持,因为它不可靠。如果可以,则传递一个文件名,否则自己附加一个ETag。

在 0.5 版本发生变更: 这个 add_etagscache_timeoutconditional 添加了参数。默认行为是添加eTag。

在 0.2 版本加入.

flask.send_from_directory(directory, path, **kwargs)

使用以下命令从目录中发送文件 send_file()

@app.route("/uploads/<path:name>")
def download_file(name):
    return send_from_directory(
        app.config['UPLOAD_FOLDER'], name, as_attachment=True
    )

这是从文件夹提供文件的一种安全方式,例如静态文件或上载。用途 safe_join() 以确保来自客户端的路径不会被恶意构建为指向指定目录之外。

如果最终路径不指向现有常规文件,则引发404 NotFound 错误。

参数:
  • directory (os.PathLike | str) -- 该目录是 path 必须位于相对于当前应用程序的根路径的下。

  • path (os.PathLike | str) -- 要发送的文件的路径,相对于 directory

  • kwargs (t.Any) -- 要传递的参数 send_file()

返回类型:

Response

Changelog

在 2.0 版本发生变更: path 取代了 filename 参数。

在 2.0 版本加入: 已将实现转移到Werkzeug。这现在是一个包装器,用于传递一些特定于烧瓶的参数。

在 0.5 版本加入.

信息闪现

flask.flash(message, category='message')

将消息闪烁到下一个请求。为了从会话中删除闪现的消息并将其显示给用户,模板必须调用 get_flashed_messages() .

Changelog

在 0.3 版本发生变更: category 参数已添加。

参数:
  • message (str) -- 要闪现的信息。

  • category (str) -- 消息的类别。 建议使用以下值:'message'``用于任何类型的消息,'error'用于错误,'info'用于信息消息,''warning'``用于警告。 但是,任何类型的字符串都可以用作类别。

返回类型:

None

flask.get_flashed_messages(with_categories=False, category_filter=())

从会话中拉出所有闪烁的消息并返回它们。 对函数的相同请求中的进一步调用将返回相同的消息。 默认情况下只返回消息,但是当`with_categories`设置为``True``时,返回值将是``(category,message)``形式的元组列表。

通过在“category_filter”中提供这些类别,将闪回的消息过滤为一个或多个类别。 这允许在单独的html块中呈现类别。 `with_categories`和`category_filter`参数是不同的:

  • 这个`with_categories`控制是否返回带有消息文本的类别(``True``给出一个元组,其中``False``只给出消息文本)。

  • category_filter 将消息筛选为只匹配所提供类别的消息。

看见 信息闪烁 举个例子。

Changelog

在 0.9 版本发生变更: 已添加`category_filter` 参数。

在 0.3 版本发生变更: 已添加`with_categories` 参数。

参数:
  • with_categories (bool) -- 设置为“True”以接收类别。

  • category_filter (Iterable[str]) -- 筛选类别以限制返回值。只会返回列表中的类别。

返回类型:

list[str] | list[tuple[str, str]]

JSON支持

FASK使用了Python的内置功能 json 默认情况下用于处理JSON的模块。可以通过分配不同的提供程序来更改JSON实现 flask.Flask.json_provider_classflask.Flask.json 。由提供的功能 flask.json 将使用 app.json 应用程序上下文是否处于活动状态。

金佳之家 |tojson Filter被配置为使用应用程序的JSON提供程序。该筛选器使用 |safe 。使用它在HTML中呈现数据 <script> 标签。

<script>
    const names = {{ names|tojson }};
    renderChart(names, {{ axis_data|tojson }});
</script>
flask.json.jsonify(*args, **kwargs)

将给定参数序列化为JSON,并返回一个 Response 属性的对象 application/json Mimetype。从视图返回的词典或列表将自动转换为JSON响应,而无需调用此方法。

这需要活动的请求或应用程序上下文,并调用 app.json.response()

在调试模式下,输出使用缩进格式化,以使其更易于阅读。这也可以由提供商控制。

可以给出位置参数或关键字参数,但不能同时给出。如果没有给出任何参数, None 是序列化的。

参数:
  • args (t.Any) -- 要序列化的单个值,或将多个值视为要序列化的列表。

  • kwargs (t.Any) -- 把它当做要连载的字典。

返回类型:

Response

Changelog

在 2.2 版本发生变更: 打电话 current_app.json.response ,允许应用程序覆盖该行为。

在 2.0.2 版本发生变更: decimal.Decimal 通过转换为字符串来支持。

在 0.11 版本发生变更: 添加了对顶层数组的序列化支持。这在古代浏览器中是一个安全风险。看见 JSON安全性

在 0.2 版本加入.

flask.json.dumps(obj, **kwargs)

将数据序列化为JSON。

如果 current_app 是可用的,它将使用其 app.json.dumps() 方法,否则它将使用 json.dumps()

参数:
  • obj (Any) -- 要序列化的数据。

  • kwargs (Any) -- 传递给 dumps 实施。

返回类型:

str

Changelog

在 2.3 版本发生变更: 这个 app 参数已删除。

在 2.2 版本发生变更: 打电话 current_app.json.dumps ,允许应用程序覆盖该行为。

在 2.0.2 版本发生变更: decimal.Decimal 通过转换为字符串来支持。

在 2.0 版本发生变更: encoding 将在烧瓶2.1中删除。

在 1.0.3 版本发生变更: app 可以直接传递,而不需要应用程序上下文进行配置。

flask.json.dump(obj, fp, **kwargs)

将数据序列化为JSON并写入文件。

如果 current_app 是可用的,它将使用其 app.json.dump() 方法,否则它将使用 json.dump()

参数:
  • obj (Any) -- 要序列化的数据。

  • fp (IO[str]) -- 为编写文本而打开的文件。应使用UTF-8编码才是有效的JSON。

  • kwargs (Any) -- 传递给 dump 实施。

返回类型:

None

Changelog

在 2.3 版本发生变更: 这个 app 参数已删除。

在 2.2 版本发生变更: 打电话 current_app.json.dump ,允许应用程序覆盖该行为。

在 2.0 版本发生变更: 写入二进制文件,并且 encoding 参数,将在烧瓶2.1中删除。

flask.json.loads(s, **kwargs)

将数据反序列化为JSON。

如果 current_app 是可用的,它将使用其 app.json.loads() 方法,否则它将使用 json.loads()

参数:
  • s (str | bytes) -- 文本或UTF-8字节。

  • kwargs (Any) -- 传递给 loads 实施。

返回类型:

Any

Changelog

在 2.3 版本发生变更: 这个 app 参数已删除。

在 2.2 版本发生变更: 打电话 current_app.json.loads ,允许应用程序覆盖该行为。

在 2.0 版本发生变更: encoding 将在烧瓶2.1中删除。数据必须是字符串或UTF-8字节。

在 1.0.3 版本发生变更: app 可以直接传递,而不需要应用程序上下文进行配置。

flask.json.load(fp, **kwargs)

将数据反序列化为JSON从文件中读取。

如果 current_app 是可用的,它将使用其 app.json.load() 方法,否则它将使用 json.load()

参数:
  • fp (IO) -- 为读取文本或UTF-8字节而打开的文件。

  • kwargs (Any) -- 传递给 load 实施。

返回类型:

Any

Changelog

在 2.3 版本发生变更: 这个 app 参数已删除。

在 2.2 版本发生变更: 打电话 current_app.json.load ,允许应用程序覆盖该行为。

在 2.2 版本发生变更: 这个 app 参数将在烧瓶2.3中删除。

在 2.0 版本发生变更: encoding 将在烧瓶2.1中删除。文件必须是文本模式或具有UTF-8字节的二进制模式。

class flask.json.provider.JSONProvider(app)

应用程序的一组标准JSON操作。它的子类可用于定制JSON行为或使用不同的JSON库。

若要实现特定库的提供程序,请子类此基类,并至少实现 dumps()loads() 。所有其他方法都有默认实现。

若要使用不同的提供程序,请使用任一子类 Flask 并设置 json_provider_class 设置为提供程序类或集 app.json 添加到类的实例。

参数:

app (App) -- 应用程序实例。这将存储为 weakref.proxy_app 属性。

Changelog

在 2.2 版本加入.

dumps(obj, **kwargs)

将数据序列化为JSON。

参数:
  • obj (Any) -- 要序列化的数据。

  • kwargs (Any) -- 可以传递给底层的JSON库。

返回类型:

str

dump(obj, fp, **kwargs)

将数据序列化为JSON并写入文件。

参数:
  • obj (Any) -- 要序列化的数据。

  • fp (IO[str]) -- 为编写文本而打开的文件。应使用UTF-8编码才是有效的JSON。

  • kwargs (Any) -- 可以传递给底层的JSON库。

返回类型:

None

loads(s, **kwargs)

将数据反序列化为JSON。

参数:
  • s (str | bytes) -- 文本或UTF-8字节。

  • kwargs (Any) -- 可以传递给底层的JSON库。

返回类型:

Any

load(fp, **kwargs)

将数据反序列化为JSON从文件中读取。

参数:
  • fp (IO) -- 为读取文本或UTF-8字节而打开的文件。

  • kwargs (Any) -- 可以传递给底层的JSON库。

返回类型:

Any

response(*args, **kwargs)

将给定参数序列化为JSON,并返回一个 Response 属性的对象 application/json Mimetype。

这个 jsonify() 函数为当前应用程序调用此方法。

可以给出位置参数或关键字参数,但不能同时给出。如果没有给出任何参数, None 是序列化的。

参数:
  • args (t.Any) -- 要序列化的单个值,或将多个值视为要序列化的列表。

  • kwargs (t.Any) -- 把它当做要连载的字典。

返回类型:

Response

class flask.json.provider.DefaultJSONProvider(app)

使用Python的内置功能提供JSON操作 json 类库。序列化以下附加数据类型:

参数:

app (App) --

static default(o)

将此函数应用于符合以下条件的任何对象 json.dumps() 不知道如何序列化。它应该返回有效的JSON类型或引发 TypeError

参数:

o (Any) --

返回类型:

Any

ensure_ascii = True

用转义序列替换非ASCII字符。这可能与某些客户端更兼容,但可以禁用以获得更好的性能和大小。

sort_keys = True

对任何序列化词典中的关键字进行排序。这对于某些缓存情况可能很有用,但可以禁用以获得更好的性能。启用时,键必须都是字符串,在排序前不会进行转换。

compact: bool | None = None

如果 True ,或 None 在调试模式之外, response() 输出不会添加缩进、换行符或空格。如果 False ,或 None 在调试模式下,它将使用非紧凑表示形式。

mimetype = 'application/json'

中设置的Mimetype response()

dumps(obj, **kwargs)

将数据作为JSON序列化为字符串。

关键字参数被传递给 json.dumps() 。设置某些参数的缺省值 defaultensure_ascii ,以及 sort_keys 属性。

参数:
返回类型:

str

loads(s, **kwargs)

将数据从字符串或字节反序列化为JSON。

参数:
返回类型:

Any

response(*args, **kwargs)

将给定参数序列化为JSON,并返回一个 Response 用它来反对。响应MIMETYPE将为“APPLICATION/JSON”,并且可以使用 mimetype

如果 compactFalse 或启用调试模式时,输出的格式将更易于阅读。

可以给出位置参数或关键字参数,但不能同时给出。如果没有给出任何参数, None 是序列化的。

参数:
  • args (t.Any) -- 要序列化的单个值,或将多个值视为要序列化的列表。

  • kwargs (t.Any) -- 把它当做要连载的字典。

返回类型:

Response

标记JSON

非标准JSON类型的无损序列化的紧凑表示。 SecureCookieSessionInterface 使用它来序列化会话数据,但在其他地方可能有用。它可以扩展到支持其他类型。

class flask.json.tag.TaggedJSONSerializer

使用标记系统紧凑地表示不是JSON类型的对象的序列化程序。作为中间序列化程序传递到 itsdangerous.Serializer .

支持以下额外类型:

default_tags = [<class 'flask.json.tag.TagDict'>, <class 'flask.json.tag.PassDict'>, <class 'flask.json.tag.TagTuple'>, <class 'flask.json.tag.PassList'>, <class 'flask.json.tag.TagBytes'>, <class 'flask.json.tag.TagMarkup'>, <class 'flask.json.tag.TagUUID'>, <class 'flask.json.tag.TagDateTime'>]

创建序列化程序时要绑定的标记类。以后可以使用 register() .

dumps(value)

标记该值并将其转储到一个紧凑的JSON字符串。

参数:

value (Any) --

返回类型:

str

loads(value)

从JSON字符串加载数据并反序列化任何标记对象。

参数:

value (str) --

返回类型:

Any

register(tag_class, force=False, index=None)

使用此序列化程序注册新标记。

参数:
  • tag_class (type[flask.json.tag.JSONTag]) -- 要注册的标记类。将用此序列化程序实例实例化。

  • force (bool) -- 覆盖现有标记。如果为假(默认),则为 KeyError 提高了。

  • index (int | None) -- 索引以按标记顺序插入新标记。当新标记是现有标记的特殊情况时很有用。如果 None (默认),标记将附加到订单末尾。

抛出:

KeyError -- 如果标记密钥已经注册并且 force 不是真的。

返回类型:

None

tag(value)

如有必要,将值转换为带标记的表示形式。

参数:

value (Any) --

返回类型:

dict[str, Any]

untag(value)

将标记的表示形式转换回原始类型。

参数:

value (dict[str, Any]) --

返回类型:

Any

class flask.json.tag.JSONTag(serializer)

用于定义类型标记的基类 TaggedJSONSerializer .

参数:

serializer (TaggedJSONSerializer) --

check(value)

检查给定值是否应使用此标记进行标记。

参数:

value (Any) --

返回类型:

bool

key: str | None = None

用于标记序列化对象的标记。如果 None ,此标记仅在标记期间用作中间步骤。

tag(value)

将该值转换为有效的JSON类型,并在其周围添加标记结构。

参数:

value (Any) --

返回类型:

Any

to_json(value)

将python对象转换为有效JSON类型的对象。稍后将添加标记。

参数:

value (Any) --

返回类型:

Any

to_python(value)

将JSON表示转换回正确的类型。标签将被删除。

参数:

value (Any) --

返回类型:

Any

让我们来看一个添加了对 OrderedDict 。DICT在JSON中没有订单,因此为了处理这个问题,我们将把条目作为 [key, value] 成对的。子类 JSONTag 并给它新的密钥 ' od' 以确定其类型。会话序列化程序首先处理字典,因此在顺序的前面插入新标记,因为 OrderedDict 必须在此之前处理 dict

from flask.json.tag import JSONTag

class TagOrderedDict(JSONTag):
    __slots__ = ('serializer',)
    key = ' od'

    def check(self, value):
        return isinstance(value, OrderedDict)

    def to_json(self, value):
        return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]

    def to_python(self, value):
        return OrderedDict(value)

app.session_interface.serializer.register(TagOrderedDict, index=0)

模板呈现

flask.render_template(template_name_or_list, **context)

使用给定的上下文按名称呈现模板。

参数:
返回类型:

str

flask.render_template_string(source, **context)

根据给定的源字符串和给定的上下文呈现模板。

参数:
  • source (str) -- 要呈现的模板的源代码。

  • context (Any) -- 要在模板中使用的变量。

返回类型:

str

flask.stream_template(template_name_or_list, **context)

按名称将具有给定上下文的模板呈现为流。这将返回一个字符串迭代器,该迭代器可用作来自视图的流响应。

参数:
返回类型:

Iterator[str]

Changelog

在 2.2 版本加入.

flask.stream_template_string(source, **context)

将具有给定上下文的给定源字符串中的模板呈现为流。这将返回一个字符串迭代器,该迭代器可用作来自视图的流响应。

参数:
  • source (str) -- 要呈现的模板的源代码。

  • context (Any) -- 要在模板中使用的变量。

返回类型:

Iterator[str]

Changelog

在 2.2 版本加入.

flask.get_template_attribute(template_name, attribute)

加载模板导出的宏(或变量)。 这可以用于从Python代码中调用宏。 例如,如果您有一个名为:file:`_cider.html`的模板,其中包含以下内容:

{% macro hello(name) %}Hello {{ name }}!{% endmacro %}

您可以从python代码中访问它,如下所示:

hello = get_template_attribute('_cider.html', 'hello')
return hello('World')
Changelog

在 0.2 版本加入.

参数:
  • template_name (str) -- 模板的名称

  • attribute (str) -- 要访问的宏变量的名称

返回类型:

Any

配置

class flask.Config(root_path, defaults=None)

工作原理和dict完全一样,但提供了从文件或特殊字典中填充它的方法。有两种常见的模式来填充配置。

您可以从配置文件中填充配置:

app.config.from_pyfile('yourconfig.cfg')

或者,您也可以在调用的模块中定义配置选项 from_object() 或者提供应该加载的模块的导入路径。也可以告诉它使用相同的模块,并在调用之前提供配置值:

DEBUG = True
SECRET_KEY = 'development key'
app.config.from_object(__name__)

在这两种情况下(从任何python文件加载或从模块加载),只有大写键添加到配置中。这使得可以在配置文件中使用小写值作为未添加到配置中的临时值,或者在实现应用程序的同一个文件中定义配置键。

可能加载配置最有趣的方法是从指向文件的环境变量:

app.config.from_envvar('YOURAPPLICATION_SETTINGS')

在这种情况下,在启动应用程序之前,您必须将此环境变量设置为要使用的文件。 在Linux和OS X上使用导出语句:

export YOURAPPLICATION_SETTINGS='/path/to/config/file'

在Windows上使用`set`代替。

参数:
  • root_path (str | os.PathLike) -- 从中相对读取文件的路径。当应用程序创建配置对象时,这是应用程序的 root_path .

  • defaults (dict | None) -- 默认值的可选字典

from_envvar(variable_name, silent=False)

从指向配置文件的环境变量加载配置。这基本上只是一个快捷方式,对于这一行代码,它有更好的错误消息:

app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
参数:
  • variable_name (str) -- 环境变量的名称

  • silent (bool) -- 设置为 True 如果您希望对丢失的文件执行静默失败。

返回:

True 如果文件加载成功,则返回。

返回类型:

bool

from_file(filename, load, silent=False, text=True)

方法加载的文件更新配置中的值 load 参数。加载的数据被传递给 from_mapping() 方法。

import json
app.config.from_file("config.json", load=json.load)

import tomllib
app.config.from_file("config.toml", load=tomllib.load, text=False)
参数:
  • filename (str | os.PathLike) -- 数据文件的路径。这可以是绝对路径,也可以是配置根路径的相对路径。

  • load (Callable[[Reader], Mapping] where Reader implements a read method.) -- 获取文件句柄并从文件返回已加载数据的映射的可调用对象。

  • silent (bool) -- 如果该文件不存在,请忽略该文件。

  • text (bool) -- 以文本或二进制模式打开文件。

返回:

True 如果文件加载成功,则返回。

返回类型:

bool

Changelog

在 2.3 版本发生变更: 这个 text 参数已添加。

在 2.0 版本加入.

from_mapping(mapping=None, **kwargs)

像更新配置一样 update() 忽略具有非上键的项。

返回:

总是会回来的 True

参数:
返回类型:

bool

Changelog

在 0.11 版本加入.

from_object(obj)

更新给定对象的值。对象可以是以下两种类型之一:

  • 字符串:在这种情况下,将导入具有该名称的对象

  • 实际的对象引用:该对象直接使用

对象通常是模块或类。 from_object() 只加载模块/类的大写属性。一 dict 对象将无法使用 from_object() 因为键 dict 不是的属性 dict 班级。

基于模块的配置示例:

app.config.from_object('yourapplication.default_config')
from yourapplication import default_config
app.config.from_object(default_config)

加载前不对对象执行任何操作。如果对象是类并且具有 @property 属性,它需要在传递给此方法之前实例化。

不应使用此函数加载实际配置,而应使用配置默认值。实际配置应加载 from_pyfile() 最好是从不在包内的位置安装,因为包可能在系统范围内安装。

请参阅:ref:config-dev-prod`以获取基于类的配置示例:meth:`from_object

参数:

obj (object | str) -- 导入名称或对象

返回类型:

None

from_prefixed_env(prefix='FLASK', *, loads=<function loads>)

加载所有以开头的环境变量 FLASK_ 从配置密钥的环境密钥中删除前缀。值通过加载函数传递,以尝试将它们转换为比字符串更具体的类型。

密钥已加载到 sorted() 秩序。

默认加载函数尝试将值解析为任何有效的JSON类型,包括字典和列表。

可以通过使用双下划线分隔键来设置嵌套词典中的特定项 (__ )。如果中间键不存在,它将被初始化为空字典。

参数:
  • prefix (str) -- 加载以此前缀开头的环境变量,并用下划线分隔 (_ )。

  • loads (Callable[[str], Any]) -- 将每个字符串值传递给此函数,并使用返回值作为配置值。如果引发任何错误,则忽略该错误,并且该值保持为字符串。缺省值为 json.loads()

返回类型:

bool

Changelog

在 2.1 版本加入.

from_pyfile(filename, silent=False)

从python文件更新配置中的值。此函数的行为就像文件是作为模块导入的, from_object() 功能。

参数:
  • filename (str | os.PathLike) -- 配置的文件名。这可以是绝对文件名,也可以是相对于根路径的文件名。

  • silent (bool) -- 设置为 True 如果您希望对丢失的文件执行静默失败。

返回:

True 如果文件加载成功,则返回。

返回类型:

bool

Changelog

在 0.7 版本加入: silent 参数。

get_namespace(namespace, lowercase=True, trim_namespace=True)

返回一个字典,其中包含与指定的命名空间/前缀匹配的配置选项的子集。示例用法:

app.config['IMAGE_STORE_TYPE'] = 'fs'
app.config['IMAGE_STORE_PATH'] = '/var/app/images'
app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com'
image_store_config = app.config.get_namespace('IMAGE_STORE_')

生成的字典`image_store_config`看起来像:

{
    'type': 'fs',
    'path': '/var/app/images',
    'base_url': 'http://img.website.com'
}

当配置选项直接映射到函数或类构造函数中的关键字参数时,这通常很有用。

参数:
  • namespace (str) -- 配置命名空间

  • lowercase (bool) -- 指示结果字典的键是否应为小写的标志

  • trim_namespace (bool) -- 指示结果字典的键是否不应包括命名空间的标志

返回类型:

dict[str, Any]

Changelog

在 0.11 版本加入.

助流器

flask.stream_with_context(generator_or_function)

当响应在服务器上启动时,请求上下文将消失。这样做是为了提高效率,并使它不太可能遇到写得不好的wsgi中间件的内存泄漏。缺点是,如果您使用流式响应,生成器将无法再访问请求绑定信息。

但是,此函数可以帮助您将上下文保留更长时间:

from flask import stream_with_context, request, Response

@app.route('/stream')
def streamed_response():
    @stream_with_context
    def generate():
        yield 'Hello '
        yield request.args['name']
        yield '!'
    return Response(generate())

或者,也可以在特定发电机周围使用:

from flask import stream_with_context, request, Response

@app.route('/stream')
def streamed_response():
    def generate():
        yield 'Hello '
        yield request.args['name']
        yield '!'
    return Response(stream_with_context(generate()))
Changelog

在 0.9 版本加入.

参数:

generator_or_function (Union[Iterator, Callable[[...], Iterator]]) --

返回类型:

Iterator

有用的内部结构

class flask.ctx.RequestContext(app, environ, request=None, session=None)

请求上下文包含每个请求的信息。FlaskApp在请求开始时创建并推送它,然后在请求结束时弹出它。它将为提供的WSGI环境创建URL适配器和请求对象。

不要试图直接使用此类,而是使用 test_request_context()request_context() 创建此对象。

当弹出请求上下文时,它将评估在应用程序上注册的所有函数以进行拆卸执行。( teardown_request()

请求上下文在请求结束时自动弹出。使用交互式调试器时,上下文将恢复为 request 仍然可以访问。类似地,测试客户端可以在请求结束后保留上下文。但是,tearDown函数可能已经关闭了一些资源,如数据库连接。

参数:
copy()

使用同一请求对象创建此请求上下文的副本。这可用于将请求上下文移动到不同的greenlet。因为实际的请求对象是相同的,所以除非锁定了对请求对象的访问,否则不能将请求上下文移动到其他线程。

Changelog

在 1.1 版本发生变更: 使用当前会话对象,而不是重新加载原始数据。这样可以防止 flask.session 指向过期的对象。

在 0.10 版本加入.

返回类型:

RequestContext

match_request()

可以被子类重写以钩住请求的匹配。

返回类型:

None

pop(exc=<object object>)

弹出请求上下文并通过此操作解除绑定。这还将触发执行 teardown_request() 装饰者。

Changelog

在 0.9 版本发生变更: 增加了 exc 参数。

参数:

exc (BaseException | None) --

返回类型:

None

flask.globals.request_ctx

海流 RequestContext 。如果请求上下文未处于活动状态,则访问此代理上的属性将引发 RuntimeError

这是一个内部对象,对于FlaskTM处理请求的方式至关重要。在大多数情况下,应该不需要访问它。你很可能想要 requestsession 取而代之的是。

class flask.ctx.AppContext(app)

应用程序上下文包含特定于应用程序的信息。如果应用程序上下文尚未处于活动状态,则在每个请求开始时创建并推送该应用程序上下文。运行CLI命令时,也会推送应用程序上下文。

参数:

app (Flask) --

pop(exc=<object object>)

弹出应用程序上下文。

参数:

exc (BaseException | None) --

返回类型:

None

push()

将应用程序上下文绑定到当前上下文。

返回类型:

None

flask.globals.app_ctx

海流 AppContext 。如果应用程序上下文未处于活动状态,则访问此代理上的属性将引发 RuntimeError

这是一个内部对象,对于FlaskTM处理请求的方式至关重要。在大多数情况下,应该不需要访问它。你很可能想要 current_appg 取而代之的是。

class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)

用于向应用程序注册蓝图的临时持有者对象。此类的实例由 make_setup_state() 方法,然后传递给所有寄存器回调函数。

参数:
  • blueprint (Blueprint) --

  • app (App) --

  • options (t.Any) --

  • first_registration (bool) --

add_url_rule(rule, endpoint=None, view_func=None, **options)

向应用程序注册规则(以及可选的视图函数)的帮助器方法。端点将自动加上蓝图名称的前缀。

参数:
返回类型:

None

app

对当前应用程序的引用

blueprint

对创建此安装状态的蓝图的引用。

first_registration

由于蓝图可以在应用程序中注册多次,而不是所有内容都希望在应用程序上注册多次,因此可以使用此属性来确定蓝图是否已在过去注册。

options

一个字典,其中包含传递给:meth:`~flask.Flask.register_blueprint`方法的所有选项。

subdomain

蓝图应该激活的子域,否则为' ' None ' ' '。

url_defaults

带有URL默认值的字典,添加到用蓝图定义的每个URL中。

url_prefix

应该用于蓝图上定义的所有URL的前缀。

信号

信号由 Blinker 类库。看见 信号 来做个介绍。

flask.template_rendered

此信号在成功呈现模板时发送。使用模板的实例调用该信号,如下所示 template 和作为词典的上下文(名为 context )。

订阅服务器示例:

def log_template_renders(sender, template, context, **extra):
    sender.logger.debug('Rendering template "%s" with context %s',
                        template.name or 'string template',
                        context)

from flask import template_rendered
template_rendered.connect(log_template_renders, app)
flask.before_render_template

此信号在模板呈现过程之前发送。使用模板的实例作为 template 和上下文作为字典(命名为 context) .

订阅服务器示例:

def log_template_renders(sender, template, context, **extra):
    sender.logger.debug('Rendering template "%s" with context %s',
                        template.name or 'string template',
                        context)

from flask import before_render_template
before_render_template.connect(log_template_renders, app)
flask.request_started

当建立请求上下文时,在任何请求处理发生之前发送该信号。由于请求上下文已经绑定,订阅者可以使用标准全局代理访问请求,例如 request

订阅服务器示例:

def log_request(sender, **extra):
    sender.logger.debug('Request context is set up')

from flask import request_started
request_started.connect(log_request, app)
flask.request_finished

在将响应发送到客户机之前就发送此信号。它通过了要发送的响应命名 response.

订阅服务器示例:

def log_response(sender, response, **extra):
    sender.logger.debug('Request context is about to close down. '
                        'Response: %s', response)

from flask import request_finished
request_finished.connect(log_response, app)
flask.got_request_exception

当在请求处理期间(包括调试时)发生未处理的异常时,发送此信号。异常作为订阅服务器传递给 exception

此信号不是为 HTTPException 或注册了错误处理程序的其他异常,除非异常是从错误处理程序引发的。

此示例说明了如何在理论上 SecurityException 已提出:

from flask import got_request_exception

def log_security_exception(sender, exception, **extra):
    if not isinstance(exception, SecurityException):
        return

    security_logger.exception(
        f"SecurityException at {request.url!r}",
        exc_info=exception,
    )

got_request_exception.connect(log_security_exception, app)
flask.request_tearing_down

此信号在请求终止时发送。这总是被调用,即使导致了异常。目前,侦听此信号的函数是在常规tearDown处理程序之后调用的,但这不是您可以依赖的。

订阅服务器示例:

def close_db_connection(sender, **extra):
    session.close()

from flask import request_tearing_down
request_tearing_down.connect(close_db_connection, app)

从Flask 0.9开始,这也将传递一个`exc`关键字参数,该参数引用了导致拆除的异常(如果有的话)。

flask.appcontext_tearing_down

此信号是在应用程序上下文被拆除时发送的。这总是被调用,即使导致了异常。目前,侦听此信号的函数是在常规tearDown处理程序之后调用的,但这不是您可以依赖的。

订阅服务器示例:

def close_db_connection(sender, **extra):
    session.close()

from flask import appcontext_tearing_down
appcontext_tearing_down.connect(close_db_connection, app)

这也将通过 exc 关键字参数,该参数引用了导致拆卸(如果有)的异常。

flask.appcontext_pushed

此信号在推送应用程序上下文时发送。发送者就是应用程序。这通常对单元测试非常有用,以便临时引入信息。例如,它可用于将资源提前设置到 g 对象。

示例用法:

from contextlib import contextmanager
from flask import appcontext_pushed

@contextmanager
def user_set(app, user):
    def handler(sender, **kwargs):
        g.user = user
    with appcontext_pushed.connected_to(handler, app):
        yield

在测试代码中:

def test_user_me(self):
    with user_set(app, 'john'):
        c = app.test_client()
        resp = c.get('/users/me')
        assert resp.data == 'username=john'
Changelog

在 0.10 版本加入.

flask.appcontext_popped

此信号在应用程序上下文弹出时发送。发送者就是应用程序。这通常符合 appcontext_tearing_down 信号。

Changelog

在 0.10 版本加入.

flask.message_flashed

此信号在应用程序闪烁消息时发送。这些消息将作为 message 关键字参数和类别为 category

订阅服务器示例:

recorded = []
def record(sender, message, category, **extra):
    recorded.append((message, category))

from flask import message_flashed
message_flashed.connect(record, app)
Changelog

在 0.10 版本加入.

基于类的视图

Changelog

在 0.7 版本加入.

class flask.views.View

子类化此类并重写 dispatch_request() 若要创建基于类的泛型视图,请执行以下操作。打电话 as_view() 创建一个视图函数,该函数使用给定的参数创建类的实例并调用其 dispatch_request 方法与任何URL变量一起使用。

看见 基于类的视图 以获取详细的指南。

class Hello(View):
    init_every_request = False

    def dispatch_request(self, name):
        return f"Hello, {name}!"

app.add_url_rule(
    "/hello/<name>", view_func=Hello.as_view("hello")
)

methods 来更改视图接受的方法。

decorators 将修饰符列表应用于生成的视图函数。应用于类本身的修饰符不会应用于生成的视图函数!

init_every_requestFalse 为了提高效率,除非您需要将请求全局数据存储在 self

classmethod as_view(name, *class_args, **class_kwargs)

将类转换为可以为路由注册的视图函数。

默认情况下,生成的视图将为每个请求创建view类的新实例,并调用其 dispatch_request() 方法。如果视图类设置了 init_every_requestFalse ,则每个请求都将使用相同的实例。

除了 name ,则将传递给此方法的所有其他参数转发给view类 __init__ 方法。

Changelog

在 2.2 版本发生变更: 添加了 init_every_request 类属性。

参数:
  • name (str) --

  • class_args (t.Any) --

  • class_kwargs (t.Any) --

返回类型:

ft.RouteCallable

decorators: ClassVar[list[Callable]] = []

要按顺序应用于生成的视图函数的修饰符的列表。记住 @decorator 语法是从下到上应用的,因此列表中的第一个修饰符将是底部修饰符。

Changelog

在 0.8 版本加入.

dispatch_request()

实际的视图函数行为。子类必须重写它并返回有效的响应。URL规则中的任何变量都作为关键字参数传递。

返回类型:

ft.ResponseReturnValue

init_every_request: ClassVar[bool] = True

默认情况下,为每个请求创建此视图类的新实例。如果视图子类将其设置为 False ,每个请求都使用相同的实例。

单个实例效率更高,尤其是在初始化过程中进行复杂设置的情况下。但是,将数据存储在 self 在请求之间不再安全,并且 g 应该改为使用。

Changelog

在 2.2 版本加入.

methods: ClassVar[Optional[Collection[str]]] = None

此视图注册的方法。使用相同的缺省值 (["GET", "HEAD", "OPTIONS"] )作为 routeadd_url_rule 默认情况下。

provide_automatic_options: ClassVar[bool | None] = None

控制是否使用 OPTIONS 方法是自动处理的。使用相同的缺省值 (True )作为 routeadd_url_rule 默认情况下。

class flask.views.MethodView

将请求方法调度到相应的实例方法。例如,如果您实现了 get 方法,它将用于处理 GET 请求。

这对于定义REST API很有用。

methods 根据类上定义的方法自动设置。

看见 基于类的视图 以获取详细的指南。

class CounterAPI(MethodView):
    def get(self):
        return str(session.get("counter", 0))

    def post(self):
        session["counter"] = session.get("counter", 0) + 1
        return redirect(url_for("counter"))

app.add_url_rule(
    "/counter", view_func=CounterAPI.as_view("counter")
)
dispatch_request(**kwargs)

实际的视图函数行为。子类必须重写它并返回有效的响应。URL规则中的任何变量都作为关键字参数传递。

参数:

kwargs (t.Any) --

返回类型:

ft.ResponseReturnValue

URL路由注册

通常有三种方法来定义路由系统的规则:

  1. 你可以使用 flask.Flask.route() 装饰者。

  2. 你可以使用 flask.Flask.add_url_rule() 功能。

  3. 您可以直接访问底层的Werkzeug路由系统,该系统公开为 flask.Flask.url_map .

路径中的可变部分可以用尖括号指定 (/user/<username> )。默认情况下,URL中的变量部分接受不带斜杠的任何字符串,但是也可以使用 <converter:name>

变量部分作为关键字参数传递给视图函数。

以下转换器可用:

string

接受不带斜线的任何文本(默认)

int

接受整数

float

比如`int`但是对于浮点值

path

类似于默认值,但也接受斜线

any

与提供的项目之一匹配

uuid

接受UUID字符串

自定义转换器可以使用 flask.Flask.url_map .

以下是一些例子:

@app.route('/')
def index():
    pass

@app.route('/<username>')
def show_user(username):
    pass

@app.route('/post/<int:post_id>')
def show_post(post_id):
    pass

要记住的一个重要细节是,FlaskTM如何处理尾部斜杠。我们的想法是保持每个URL的唯一性,以便应用以下规则:

  1. 如果规则以斜线结尾,并且用户在请求时没有斜线,则会自动将用户重定向到带有尾随斜线的同一页。

  2. 如果规则没有以尾随斜杠结尾,并且用户请求页面以尾随斜杠结尾,则会引发404 Not Found。

这与Web服务器处理静态文件的方式是一致的。这也使安全地使用相对链接目标成为可能。

您还可以为同一函数定义多个规则。然而,它们必须是独一无二的。也可以指定默认值。例如,以下是接受可选页面的URL的定义:

@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
    pass

这说明 /users/ 将是第一页的URL,并且 /users/page/N 将是网页的URL N .

如果一个URL包含一个默认值,它将通过301重定向重定向到它的简单表单。在上面的例子中, /users/page/1 将被重定向到 /users/ . 如果你的路线 GETPOST 请求,确保默认路由只处理 GET ,因为重定向无法保留表单数据。::

@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
   pass

以下是满足以下要求的参数 route()add_url_rule() 接受吧。唯一的区别是,使用ROUTE参数使用修饰符而不是 view_func 参数。

rule

作为字符串的URL规则

endpoint

已注册URL规则的终结点。FLAASK本身假定,如果没有明确说明,view函数的名称就是端点的名称。

view_func

向提供的终结点提供请求时要调用的函数。如果未提供此功能,则可以在以后通过将其存储在 view_functions 以终结点为键的字典。

defaults

具有此规则默认设置的词典。有关默认设置的工作原理,请参阅上面的示例。

subdomain

在使用子域匹配的情况下指定子域的规则。如果未指定,则假定为默认子域。

**options

要转发到基础 Rule 对象。Werkzeug的一个变化是对方法选项的处理。方法是此规则应限制为的方法的列表 (GETPOST 等)。默认情况下,规则只监听 GET (并且隐含地 HEAD )。从烧瓶0.6开始, OPTIONS 由标准请求处理隐式添加和处理。它们必须指定为关键字参数。

查看功能选项

对于内部使用,视图函数可以附加一些属性来定制视图函数通常无法控制的行为。可以选择提供以下属性来重写某些默认值 add_url_rule() 或一般行为:

  • __name__ :默认情况下,函数的名称用作端点。如果显式提供了ENDPOINT,则使用此值。此外,默认情况下,它将以蓝图的名称作为前缀,该名称不能从函数本身进行定制。

  • methods :如果在添加URL规则时未提供方法,则如果 methods 属性存在。如果是这样的话,它将从那里获取方法的信息。

  • provide_automatic_options :如果设置了此属性,Flask会强制启用或禁用HTTP的自动实现 OPTIONS 回应。这在处理想要自定义 OPTIONS 以每个查看为基础的回复。

  • required_methods: 如果设置了此属性,则在注册URL规则时,即使在 route() 调用。

完整例子:

def index():
    if request.method == 'OPTIONS':
        # custom options handling here
        ...
    return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']

app.add_url_rule('/', index)
Changelog

在 0.8 版本加入: 添加了“provide_automatic_options”功能。

命令行界面

class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, set_debug_flag=True, **extra)

类的特殊子类 AppGroup 支持从已配置的Flaskapp加载更多命令的组。通常情况下,开发人员不必与这个类交互,但在一些非常高级的用例中,为它创建一个实例是有意义的。看见 自定义脚本

参数:
  • add_default_commands (bool) -- 如果这是真的,那么将添加默认的run和shell命令。

  • add_version_option (bool) -- 添加 --version 选择权。

  • create_app (t.Callable[..., Flask] | None) -- 传递脚本信息并返回加载的应用程序的可选回调。

  • load_dotenv (bool) -- 加载最近的 .env.flaskenv 用于设置环境变量的文件。也会将工作目录更改为包含在被找到的第一个文件的目录。

  • set_debug_flag (bool) -- 设置应用程序的调试标志。

  • extra (t.Any) --

Changelog

在 2.2 版本发生变更: 添加了 -A/--app--debug/--no-debug-e/--env-file 选择。

在 2.2 版本发生变更: 在运行时推送应用程序上下文 app.cli 命令,因此 @with_appcontext 这些命令不再需要。

在 1.0 版本发生变更: 如果安装,python-dotenv将用于加载来自:file:.env`和:file:.flaskenv`文件的环境变量。

get_command(ctx, name)

如果给定上下文和命令名,则返回 Command 对象(如果它存在或返回) None.

list_commands(ctx)

返回子命令名称的列表,其显示顺序为。

make_context(info_name, args, parent=None, **extra)

当给定信息名称和参数时,此函数将启动解析并创建新的 Context 。不过,它并不调用实际的命令回调。

若要在不重写此方法的情况下快速自定义使用的上下文类,请将 context_class 属性。

参数:
  • info_name (str | None) -- 此调用的信息名称。通常,这是脚本或命令最具描述性的名称。对于顶层脚本,它通常是脚本的名称,对于下面的命令,它是命令的名称。

  • args (list[str]) -- 要解析为字符串列表的参数。

  • parent (click.core.Context | None) -- 父上下文(如果可用)。

  • extra (Any) -- 转发给上下文构造函数的额外关键字参数。

返回类型:

Context

在 8.0 版本发生变更: 添加了 context_class 属性。

parse_args(ctx, args)

在给定上下文和参数列表的情况下,这将创建解析器并解析参数,然后根据需要修改上下文。这将由自动调用 make_context()

参数:
返回类型:

list[str]

class flask.cli.AppGroup(name=None, commands=None, **attrs)

它的工作原理类似于常规单击 Group 但它改变了 command() 使其自动包装函数 with_appcontext() .

不要混淆 FlaskGroup .

参数:
command(*args, **kwargs)

它的工作方式与在正则表达式中使用相同名称的方法完全相同 click.Group 但它包含了回拨 with_appcontext() 除非它是通过路过而残废的 with_appcontext=False .

group(*args, **kwargs)

它的工作方式与在正则表达式中使用相同名称的方法完全相同 click.Group 但是它默认组类为 AppGroup .

class flask.cli.ScriptInfo(app_import_path=None, create_app=None, set_debug_flag=True)

对象来处理烧瓶应用程序。这通常不需要与接口,因为它在调度中用于内部单击。在Flask的未来版本中,这个对象很可能会扮演更大的角色。通常由 FlaskGroup 但您也可以手动创建它并将其作为单击对象传递。

参数:
  • app_import_path (str | None) --

  • create_app (t.Callable[..., Flask] | None) --

  • set_debug_flag (bool) --

app_import_path

(可选)flask应用程序的导入路径。

create_app

(可选)传递脚本信息以创建应用程序实例的函数。

data: dict[t.Any, t.Any]

具有可与此脚本信息关联的任意数据的字典。

load_app()

加载flask应用程序(如果尚未加载)并返回它。多次调用此函数只会返回已加载的应用程序。

返回类型:

Flask

flask.cli.load_dotenv(path=None)

按优先顺序加载“dotenv”文件以设置环境变量。

如果已经设置了env var,则不会覆盖它,因此列表中的早期文件优先于后期文件。

如果 python-dotenv 未安装。

参数:

path (str | os.PathLike | None) -- 在该位置加载文件,而不是搜索。

返回:

如果加载了文件,则为“True”。

返回类型:

bool

Changelog

在 2.0 版本发生变更: 当前目录不会更改为加载文件的位置。

在 2.0 版本发生变更: 加载环境文件时,将默认编码设置为UTF-8。

在 1.1.0 版本发生变更: 返回 False 如果没有指定路径,则在未安装dot-env文件时。

在 1.0 版本加入.

flask.cli.with_appcontext(f)

包装回调,以确保它与脚本的应用程序上下文一起执行。

在下注册的自定义命令(及其选项) app.cliblueprint.cli 将始终有一个可用的应用程序上下文,在这种情况下不需要此修饰符。

Changelog

在 2.2 版本发生变更: 对于子命令和修饰的回调,应用程序上下文处于活动状态。应用程序上下文始终可用于 app.cli 命令和参数回调。

flask.cli.pass_script_info(f)

标记一个函数,以便 ScriptInfo 作为第一个参数传递给click回调。

参数:

f (t.Callable[te.Concatenate[T, P], R]) --

返回类型:

t.Callable[P, R]

flask.cli.run_command = <Command run>

运行本地开发服务器。

此服务器仅用于开发目的。它不提供生产WSGi服务器的稳定性、安全性或性能。

默认情况下,使用‘--DEBUG’选项启用重载程序和调试器。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Any

flask.cli.shell_command = <Command shell>

在给定的FlaskTM应用程序的上下文中运行交互式的PythonShell程序。应用程序将根据其配置填充此Shell的默认命名空间。

这对于执行管理代码的小片段而不必手动配置应用程序很有用。

参数:
  • args (Any) --

  • kwargs (Any) --

返回类型:

Any