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_matching
和static_host
被添加。在 1.0 版本加入: 参数
subdomain_matching
被添加。子域匹配现在需要手动启用。设置SERVER_NAME
不会隐式启用它。在 0.11 版本加入: 参数 root_path 被添加。
在 0.8 版本加入: 参数 instance_path 和 instance_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
,它调用此对象。
- add_template_filter(f, name=None)¶
注册自定义模板筛选器。工作原理和
template_filter()
装饰者很像。
- add_template_global(f, name=None)¶
注册自定义模板全局函数。工作原理和
template_global()
装饰者很像。Changelog
在 0.10 版本加入.
- add_template_test(f, name=None)¶
注册自定义模板测试。工作原理和
template_test()
装饰者很像。Changelog
在 0.10 版本加入.
- 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
属性时,如果不传递该参数,则将其用作默认值。
- 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 版本加入.
- 返回类型:
- app_ctx_globals_class¶
_AppCtxGlobals
的别名
- async_to_sync(func)¶
返回将运行协程函数的同步函数。
result = app.async_to_sync(func)(*args, **kwargs)
重写此方法以更改应用程序将异步代码转换为可同步调用的方式。
Changelog
在 2.0 版本加入.
- auto_find_instance_path()¶
如果实例路径未提供给应用程序类的构造函数,则尝试查找该路径。它将基本上计算到名为
instance
在主文件或包旁边。Changelog
在 0.8 版本加入.
- 返回类型:
- 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
一旦发现了应用程序并注册了蓝图,就可以执行命令。
- 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) --
- 返回类型:
- property debug: bool¶
是否启用调试模式。使用时
flask run
要启动开发服务器,将为未处理的异常显示交互式调试器,并在代码更改时重新加载服务器。这映射到DEBUG
配置密钥。如果设置得晚,它的行为可能不会像预期的那样。在生产环境中部署时不启用调试模式。
默认:
False
- 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(): ...
- ensure_sync(func)¶
确保该函数对于WSGI工作者是同步的。平地
def
函数按原样返回。async def
函数被包装为运行并等待响应。重写此方法以更改应用程序运行异步视图的方式。
Changelog
在 2.0 版本加入.
- 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
类。
- extensions: dict¶
扩展可以存储应用程序特定状态的位置。例如,这是一个扩展可以存储数据库引擎和类似东西的地方。
密钥必须与扩展模块的名称匹配。例如,如果在 flask_foo, 密钥是
'foo'
.Changelog
在 0.7 版本加入.
- full_dispatch_request()¶
发送请求,除此之外,还执行请求的预处理和后处理以及HTTP异常捕获和错误处理。
Changelog
在 0.7 版本加入.
- 返回类型:
- 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 版本加入.
- handle_exception(e)¶
处理一个与错误处理程序没有关联的异常,或者是从错误处理程序引发的异常。这总是导致500
InternalServerError
.总是发送
got_request_exception
信号。如果
PROPAGATE_EXCEPTIONS
是True
,则会重新引发错误,以便调试器可以显示该错误。否则,将记录原始异常,并引发InternalServerError
是返回的。如果注册了错误处理程序
InternalServerError
或500
,它将被使用。为了保持一致性,处理程序将始终接收InternalServerError
. 原始未处理的异常可用作e.original_exception
.Changelog
在 1.1.0 版本发生变更: 总是通过考试
InternalServerError
实例,设置original_exception
对于未处理的错误。在 1.1.0 版本发生变更:
after_request
即使在没有处理程序的情况下,默认的500响应也会完成函数和其他终结。在 0.3 版本加入.
- 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
用来调用error
,endpoint
和values
。如果函数返回None
或者引发一个BuildError
,它被跳过。否则,它的返回值由url_for
。
- 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 版本加入.
- instance_path¶
保留实例文件夹的路径。
Changelog
在 0.8 版本加入.
- property jinja_env: Environment¶
用于加载模板的Jinja环境。
环境是在第一次访问此属性时创建的。改变
jinja_options
之后就没有效果了。
- jinja_environment¶
Environment
的别名
- property jinja_loader: jinja2.loaders.FileSystemLoader | None¶
此对象模板的JJJA加载器。默认情况下,这是一个类
jinja2.loaders.FileSystemLoader
至template_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¶
- 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 版本加入.
- 返回类型:
- make_config(instance_relative=False)¶
用于由flask构造函数创建config属性。这个 instance_relative 参数是从flask的构造函数传入的(此处名为 instance_relative_config) 并指示配置是相对于实例路径还是应用程序的根路径。
Changelog
在 0.8 版本加入.
- make_default_options_response()¶
调用此方法以创建默认
OPTIONS
反应。这可以通过子类化来更改,以更改OPTIONS
响应。Changelog
在 0.7 版本加入.
- 返回类型:
- make_response(rv)¶
将视图函数的返回值转换为
response_class
.- 参数:
rv (ft.ResponseReturnValue) -- View函数的返回值。View函数必须返回响应。归来
None
,或视图结束而不返回,则不允许。允许以下类型的view_rv
:str
创建一个响应对象,将编码为UTF-8的字符串作为正文。bytes
创建一个以字节为主体的响应对象。dict
一本词典,在归还之前要经过整理。list
一份名单,在退回之前要经过确认。generator
或iterator
一台返回的发电机str
或bytes
作为回应进行流传输。tuple
要么(body, status, headers)
,(body, status)
,或(body, headers)
,在哪里body
这里允许的任何其他类型,status
是字符串或整数,并且headers
是一本词典或一份(key, value)
元组。如果body
是一种response_class
实例,status
覆盖现有值并headers
是扩展的。response_class
该对象原封不动地返回。其他Response
对象被强制设置为的response_class
。callable()
该函数被作为WSGI应用程序调用。结果用于创建响应对象。- 返回类型:
Changelog
在 2.2 版本发生变更: 生成器将被转换为流响应。列表将被转换为JSON响应。
在 1.1 版本发生变更: DICT将被转换为JSON响应。
在 0.9 版本发生变更: 以前,元组被解释为响应对象的参数。
- make_shell_context()¶
返回此应用程序的交互式shell的shell上下文。这将运行所有注册的shell上下文处理器。
Changelog
在 0.11 版本加入.
- 返回类型:
- property name: str¶
应用程序的名称。这通常是导入名,如果导入名是main,则与从运行文件猜测的不同。当flask需要应用程序的名称时,此名称用作显示名称。它可以设置和重写以更改值。
Changelog
在 0.8 版本加入.
- open_instance_resource(resource, mode='rb')¶
从应用程序的实例文件夹打开资源(
instance_path
)。其他工作方式如open_resource()
. 也可以打开实例资源进行写入。
- open_resource(resource, mode='rb')¶
打开相对于的资源文件
root_path
用来阅读的。例如,如果文件
schema.sql
紧挨着文件app.py
凡.Flask
应用程序已定义,可以使用以下命令打开:with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- 参数:
- 返回类型:
注意:这是Flask类中相同方法的副本。
- permanent_session_lifetime¶
A
timedelta
用于去设置永久会话的到期日期。默认值是31天,这使得一个永久会话可以存活大约一个月。也可以从配置中使用
PERMANENT_SESSION_LIFETIME
配置密钥。默认为timedelta(days=31)
- 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
.- 返回类型:
- redirect(location, code=302)¶
创建重定向响应对象。
这是由调用的
flask.redirect()
,也可以直接调用。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 版本加入.
- request_context(environ)¶
创建一个
RequestContext
表示WSGi环境。使用Awith
阻止推送上下文,这将使request
指向这个请求。详见:doc:/reqcontext .
通常,您不应该从自己的代码中调用它。当处理请求时,请求环境会被:meth:wsgi_app`自动推送,所以使用 :meth:`test_request_context 创建环境和上下文。
- 参数:
environ (dict) -- wsgi环境
- 返回类型:
- root_path¶
文件系统上包的绝对路径。用于查找包中包含的资源。
- route(rule, **options)¶
修饰一个视图函数,用给定的URL规则和选项注册它。打电话
add_url_rule()
,其中有关于实现的更多细节。@app.route("/") def index(): return "Hello, World!"
看见 URL路由注册 。
路径的端点名称默认为查看函数的名称,如果
endpoint
参数未传递。这个
methods
参数默认为["GET"]
。HEAD
和OPTIONS
是自动添加的。
- run(host=None, port=None, debug=None, load_dotenv=True, **options)¶
在本地开发服务器上运行应用程序。
不要使用
run()
在生产环境中。它不是为了满足生产服务器的安全和性能要求。相反,请参见 部署到生产环境 以获得WSGI服务器建议。如果
debug
设置了标志,服务器将自动重新加载代码更改,并在发生异常时显示调试器。如果要在调试模式下运行应用程序,但禁用交互式调试器上的代码执行,则可以通过
use_evalex=False
作为参数。这将保持调试器的回溯屏幕处于活动状态,但禁用代码执行。不建议在自动重新加载的开发中使用此函数,因为它受到严重支持。相反,您应该使用 flask 命令行脚本
run
支持。牢记
除非处于调试模式,否则Flask将使用通用错误页禁止任何服务器错误。因此,为了在不重新加载代码的情况下仅启用交互式调试器,必须调用具有
debug=True
和use_reloader=False
的:meth:run . 设置use_debugger
到True
, 如果不处于调试模式,则不会捕获任何异常,因为不会捕获任何异常。- 参数:
host (str | None) -- 要侦听的主机名。设置为
'0.0.0.0'
使服务器也可以在外部使用。默认为'127.0.0.1'
或者``SERVER_NAME``配置变量中的主机(如果存在)。port (int | None) -- web服务器的端口。默认为
5000
或在SERVER_NAME
配置变中量定义的端口(如果存在)。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 版本加入.
- send_static_file(filename)¶
用于从提供文件的查看功能
static_folder
。路径将在以下位置为该视图自动注册static_url_path
如果static_folder
已经设置好了。注意:这是Flask类中相同方法的副本。
Changelog
在 0.5 版本加入.
- 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) --
- 返回类型:
- 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]
- template_global(name=None)¶
用于注册自定义模板全局函数的修饰符。可以为全局函数指定名称,否则将使用函数名称。例子::
@app.template_global() def double(n): return 2 * n
Changelog
在 0.10 版本加入.
- 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 版本加入.
- test_cli_runner(**kwargs)¶
创建用于测试CLI命令的CLI运行程序。见 使用CLI运行器运行命令 .
返回的实例
test_cli_runner_class
,默认情况下FlaskCliRunner
. flask app对象作为第一个参数传递。Changelog
在 1.0 版本加入.
- 参数:
kwargs (t.Any) --
- 返回类型:
- 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) --
- 返回类型:
- 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_SCHEME,
subdomain
,: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。
- 返回类型:
- 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 版本加入.
- 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
。每个函数都是用error
,endpoint
和values
。如果函数返回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_ROOT
和PREFERRED_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
。
- 返回类型:
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_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.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>)¶
- 参数:
- add_app_template_filter(f, name=None)¶
注册模板筛选器,该筛选器在应用程序呈现的任何模板中可用。其工作原理类似于
app_template_filter()
装饰师。相当于Flask.add_template_filter()
。
- add_app_template_global(f, name=None)¶
注册一个全局模板,该模板可在应用程序呈现的任何模板中使用。其工作原理类似于
app_template_global()
装饰师。相当于Flask.add_template_global()
。Changelog
在 0.10 版本加入.
- add_app_template_test(f, name=None)¶
注册模板测试,该测试可在应用程序呈现的任何模板中使用。其工作原理类似于
app_template_test()
装饰师。相当于Flask.add_template_test()
。Changelog
在 0.10 版本加入.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
在蓝图中注册URL规则。看见
Flask.add_url_rule()
以获取完整的文档。URL规则以蓝图的URL前缀作为前缀。终结点名称,与一起使用
url_for()
,以蓝图的名称作为前缀。
- 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()
。
- app_template_filter(name=None)¶
注册模板筛选器,该筛选器在应用程序呈现的任何模板中可用。相当于
Flask.template_filter()
。
- app_template_global(name=None)¶
注册一个全局模板,该模板可在应用程序呈现的任何模板中使用。相当于
Flask.template_global()
。Changelog
在 0.10 版本加入.
- app_template_test(name=None)¶
注册模板测试,该测试可在应用程序呈现的任何模板中使用。相当于
Flask.template_test()
。Changelog
在 0.10 版本加入.
- 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
- endpoint(endpoint)¶
修饰一个视图函数,以便为给定的终结点注册它。在添加规则时不使用
view_func
使用add_url_rule()
。app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- 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
类。
- 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 版本加入.
- property has_static_folder: bool¶
True
如果static_folder
已经设置好了。Changelog
在 0.5 版本加入.
- import_name¶
此对象所属的包或模块的名称。一旦构造函数设置了它,就不要更改它。
- property jinja_loader: jinja2.loaders.FileSystemLoader | None¶
此对象模板的JJJA加载器。默认情况下,这是一个类
jinja2.loaders.FileSystemLoader
至template_folder
如果它已设置。Changelog
在 0.5 版本加入.
- make_setup_state(app, options, first_registration=False)¶
创建
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())
- 参数:
- 返回类型:
注意:这是Flask类中相同方法的副本。
- 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 版本加入.
- root_path¶
文件系统上包的绝对路径。用于查找包中包含的资源。
- route(rule, **options)¶
修饰一个视图函数,用给定的URL规则和选项注册它。打电话
add_url_rule()
,其中有关于实现的更多细节。@app.route("/") def index(): return "Hello, World!"
看见 URL路由注册 。
路径的端点名称默认为查看函数的名称,如果
endpoint
参数未传递。这个
methods
参数默认为["GET"]
。HEAD
和OPTIONS
是自动添加的。
- send_static_file(filename)¶
用于从提供文件的查看功能
static_folder
。路径将在以下位置为该视图自动注册static_url_path
如果static_folder
已经设置好了。注意:这是Flask类中相同方法的副本。
Changelog
在 0.5 版本加入.
- 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()
装饰师。该数据结构是内部的。不应直接修改,其格式可能随时更改。
- 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()
装饰师。该数据结构是内部的。不应直接修改,其格式可能随时更改。
传入请求数据¶
- class flask.Request(environ, populate_request=True, shallow=False)¶
在flask中默认使用的请求对象。记住匹配的端点和视图参数。
它最终成为:class:~flask.request。 如果要替换使用的请求对象,可以将其子类化并将:attr:`~flask.Flask.request_class`设置为子类。
请求对象是一个:class:`~werkzeug.wrappers.Request`子类,它提供了Werkzeug定义的所有属性以及一些特定于Flask的属性。
- property accept_charsets: CharsetAccept¶
此客户端支持的字符集列表
CharsetAccept
对象。
- 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
在响应上指示允许哪些方法。
- 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 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¶
- 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
的值是WerkzeugFileStorage
对象。它的行为基本上类似于您从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。
- get_data(cache=True, as_text=False, parse_form_data=False)¶
这将从客户端将缓冲的传入数据读取到一个字节对象中。默认情况下,这是缓存的,但可以通过设置 cache 至 False 。
通常,不首先检查内容长度就调用此方法是一个坏主意,因为客户机可能会发送几十兆字节或更多的字节来导致服务器内存问题。
注意,如果表单数据已经被解析,那么这个方法不会返回任何内容,因为表单数据解析不会像这个方法那样缓存数据。隐式调用表单数据分析函数集 parse_form_data 到 True. 完成后,如果表单分析器处理数据,则此方法的返回值将为空字符串。这通常是不必要的,因为如果缓存了整个数据(这是默认值),表单分析器将使用缓存的数据来解析表单数据。在调用此方法之前,请注意首先检查内容长度,以避免耗尽服务器内存。
如果 as_text 设置为 True 返回值将是已解码的字符串。
Changelog
在 0.9 版本加入.
- get_json(force=False, silent=False, cache=True)¶
解析
data
作为JSON。如果MIMETYPE未指示JSON (application/json ,见
is_json
),否则解析失败,on_json_loading_failed()
并将其返回值用作返回值。默认情况下,这将引发415不支持的媒体类型。- 参数:
- 返回类型:
Any | None
Changelog
在 2.3 版本发生变更: 引发415错误,而不是400。
在 2.1 版本发生变更: 如果内容类型不正确,则引发400错误。
- headers¶
随请求一起接收的标头。
- property host: str¶
向其发出请求的主机名,如果是非标准的,则包括端口。经过验证
trusted_hosts
。
- property if_modified_since: datetime.datetime | None¶
被解析的 If-Modified-Since 标头作为DateTime对象。
Changelog
在 2.0 版本发生变更: DateTime对象是时区感知的。
- 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_length
或max_content_length
。使用
stream
取而代之的是。
- is_multiprocess¶
如果应用程序由生成多个进程的WSGI服务器提供服务,则为“True”的布尔值。
- is_multithread¶
如果应用程序由多线程WSGI服务器提供,则为“True”的布尔值。
- is_run_once¶
如果应用程序在进程生命周期中只执行一次,则布尔值为“True”。 例如,这就是CGI的情况,但不能保证执行只发生一次。
- 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 版本加入.
- 返回类型:
- max_form_memory_size: int | None = None¶
表单域的最大大小。这将被转发到表单数据解析功能 (
parse_form_data()
)。设置时,并设置form
或files
属性,并且内存中用于POST数据的数据长于指定值aRequestEntityTooLarge
引发异常。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
。- 返回类型:
Changelog
在 2.3 版本发生变更: 引发415错误,而不是400。
- origin¶
发出请求的主机。设置
access_control_allow_origin
在响应中指明哪些来源是允许的。
- parameter_storage_class¶
- property pragma: HeaderSet¶
Pragma general header字段用于包括可能应用于请求/响应链上的任何收件人的特定于实现的指令。所有pragma指令都从协议的角度指定可选行为;但是,有些系统可能要求该行为与指令一致。
- property range: werkzeug.datastructures.range.Range | None¶
解析 Range 标题。
Changelog
在 0.7 版本加入.
- 返回类型:
- referrer¶
Referer[sic]请求头字段允许客户机为服务器的利益指定从中获取请求URI的资源的地址(uri)(“referer”,尽管头字段拼写错误)。
- remote_addr¶
发送请求的客户端的地址。
- remote_user¶
如果服务器支持用户身份验证,并且脚本受保护,则此属性包含用户身份验证的用户名。
- scheme¶
请求使用的协议的URL方案,例如
https
或wss
。
- server¶
服务器的地址。
(host, port)
,(path, None)
对于Unix套接字,或None
如果不知道的话。
- property stream: IO[bytes]¶
带有安全检查的WSGI输入流。此流只能使用一次。
使用
get_data()
以获取字节或文本形式的完整数据。这个data
属性仅在它们不表示表单数据时才包含完整字节。这个form
属性将在这种情况下包含已分析的表单数据。不像
input_stream
,这条小溪防止无限的小溪或阅读过去content_length
或max_content_length
。如果
max_content_length
已设置,则可以在以下情况下在流上强制执行wsgi.input_terminated
已经设置好了。否则,返回空流。如果在基础流(如太大的文件或无限流)耗尽之前达到限制,则不能安全地读取流的其余内容。根据服务器对此的处理方式,客户端可能会显示“连接重置”失败,而不是看到413响应。
Changelog
在 2.3 版本发生变更: 检查
max_content_length
先发制人,边读边读。在 0.9 版本发生变更: 即使首先访问了表单解析,也始终设置流(但可能会被使用)。
- trusted_hosts: list[str] | None = None¶
处理请求时的有效主机名。默认情况下,所有主机都是可信的,这意味着无论客户端说主机是什么,都将被接受。
因为
Host
和X-Forwarded-Host
恶意客户端可以将标头设置为任何值,建议设置此属性或在代理中实现类似的验证(如果应用程序在代理之后运行)。Changelog
在 0.9 版本加入.
- 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
子类从字符串中分析数据。
- property values: CombinedMultiDict[str, str]¶
这种A
werkzeug.datastructures.CombinedMultiDict
结合了args
和form
.仅对于GET请求,
args
存在,而不是form
。Changelog
在 2.0 版本发生变更: 仅对于GET请求,
args
存在,而不是form
。
响应对象¶
- 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在某些环境中可能不可用。
- 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¶
缓存控制通用报头字段用于指定请求/响应链上的所有缓存机制必须遵守的指令。
- call_on_close(func)¶
将函数添加到内部函数列表中,该函数应作为关闭响应的一部分进行调用。从0.7开始,此函数还返回传递的函数,因此可以将其用作修饰符。
Changelog
在 0.6 版本加入.
- 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_status = 200¶
如果未提供,则为默认状态。
- delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
删除Cookie。如果key不存在,则以静默方式失败。
- 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)
如果您想要在主调度程序中对响应进行后处理并使用子类提供的功能,这尤其有用。
请记住,如果可能,这将修改适当的响应对象!
- freeze()¶
使响应对象准备好进行筛选。执行以下操作:
将响应缓冲到列表中,忽略
implicity_sequence_conversion
和direct_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 功能。这会尝试自动解决此类边缘情况。但是如果你没有得到预期的输出,你应该设置 buffered 至 True 它强制执行缓冲。
- get_app_iter(environ)¶
返回给定环境的应用程序迭代器。根据请求方法和当前状态代码,返回值可能是空响应,而不是来自响应的响应。
如果请求方法为 HEAD 或者状态代码在HTTP规范需要空响应的范围内,则返回空的迭代数。
Changelog
在 0.6 版本加入.
- 参数:
environ (WSGIEnvironment) -- 请求的WSGI环境。
- 返回:
一个可迭代的响应。
- 返回类型:
t.Iterable[bytes]
- get_data(as_text=False)¶
响应正文的字符串表示形式。无论何时调用此属性,都会对响应Iterable进行编码和扁平化。如果您传输大数据,这可能会导致不必要的行为。
可以通过设置禁用此行为
implicit_sequence_conversion
至 False 。如果 as_text 设置为 True 返回值将是已解码的字符串。
Changelog
在 0.9 版本加入.
- get_etag()¶
在表单中返回一个元组
(etag, is_weak)
。如果没有ETag,则返回值为(None, None)
。
- get_json(force=False, silent=False)¶
解析
data
作为JSON。在测试过程中非常有用。如果MIMETYPE未指示JSON (application/json ,见
is_json
),则返回None
。不像
Request.get_json()
,则不会缓存结果。
- 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 版本加入.
- implicit_sequence_conversion = True¶
如果设置为 False 访问响应对象的属性不会尝试使用响应迭代器并将其转换为列表。
Changelog
在 0.6.2 版本加入: 该属性以前被称为 implicit_seqence_conversion 。(注意打字错误)。如果您确实使用了此功能,则必须调整代码以适应名称更改。
- property is_streamed: bool¶
如果响应是流的(响应不是具有长度信息的可迭代对象),则此属性为 True 。在这种情况下,Streamed意味着没有关于迭代次数的信息。这通常是 True 如果将生成器传递给响应对象。
这对于在应用某种不应对流响应进行的后期过滤之前进行检查非常有用。
- iter_encoded()¶
ITER使用响应的编码进行编码的响应。如果响应对象作为WSGI应用程序调用,则此方法的返回值用作应用程序迭代器,除非
direct_passthrough
已被激活。
- 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,则不执行任何操作。
为了在处理范围请求时获得最佳性能,建议您的响应数据对象实现 seekable , seek 和 tell 方法,如
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 无法分析或满足标头。- 返回类型:
Changelog
在 2.0 版本发生变更: 如果长度为0,则跳过范围处理,而不是引发416范围不满足的错误。
- make_sequence()¶
转换列表中的响应迭代器。默认情况下,如果需要,此操作会自动发生。如果 implicit_sequence_conversion 则不会自动调用此方法,并且某些属性可能会引发异常。这也会对所有项目进行编码。
Changelog
在 0.6 版本加入.
- 返回类型:
None
- property max_cookie_size: int¶
只读视图
MAX_COOKIE_SIZE
配置密钥。看见
max_cookie_size
在Werkzeug的文件里
- 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对象是时区感知的。
- set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)¶
设置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"
将设置域可读的Cookiewww.example.com
,foo.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 版本加入.
- property stream: ResponseStream¶
响应可作为只写流迭代。
- 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 版本加入.
- get_cookie_domain(app)¶
它的价值在于
Domain
会话Cookie上的参数。如果未设置,浏览器将仅将Cookie发送到设置Cookie的确切域。否则,它们也会将其发送到给定值的任何子域。使用
SESSION_COOKIE_DOMAIN
配置。Changelog
在 2.3 版本发生变更: 默认情况下不设置,不会回退到
SERVER_NAME
。
- get_cookie_httponly(app)¶
如果会话cookie应该是httponly,则返回True。 这当前只返回``SESSION_COOKIE_HTTPONLY`` config var的值。
- get_cookie_path(app)¶
返回cookie应该有效的路径。 默认实现使用来自``SESSION_COOKIE_PATH`` config var的值(如果已设置),并回退到``APPLICATION_ROOT``或使用``/
如果它是``None
。
- get_cookie_samesite(app)¶
如果cookie应该使用``SameSite``属性,则返回``'Strict'
或
'Lax'``。 这当前只返回:data:`SESSION_COOKIE_SAMESITE`设置的值。
- get_cookie_secure(app)¶
如果cookie应该是安全的,则返回true。当前只返回
SESSION_COOKIE_SECURE
设置。
- get_expiration_time(app, session)¶
返回会话到期日期或
None
如果会话链接到浏览器会话。默认实现现在返回+在应用程序上配置的永久会话生存期。- 参数:
app (Flask) --
session (SessionMixin) --
- 返回类型:
datetime | None
- is_null_session(obj)¶
检查给定对象是否为空会话。不要求保存空会话。
这将检查对象是否是默认情况下的实例:attr:null_session_class。
- make_null_session(app)¶
如果由于配置错误而无法加载实际会话支持,则创建一个空会话,该会话充当替换对象。 这主要有助于用户体验,因为空会话的工作仍然是支持查找而不抱怨,但是通过有关失败的有用错误消息来回答修改。
默认情况下这将创建
null_session_class
。- 参数:
app (Flask) --
- 返回类型:
- 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
。- 参数:
app (Flask) --
session (SessionMixin) --
response (Response) --
- 返回类型:
None
- should_set_cookie(app, session)¶
由会话后端用于确定
Set-Cookie
应为此响应设置此会话cookie的头。如果会话已被修改,则设置cookie。如果会议是永久性的,SESSION_REFRESH_EACH_REQUEST
config为true,始终设置cookie。如果删除了会话,则通常跳过此检查。
Changelog
在 0.11 版本加入.
- 参数:
app (Flask) --
session (SessionMixin) --
- 返回类型:
- 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
。- 参数:
app (Flask) --
session (SessionMixin) --
response (Response) --
- 返回类型:
None
- serializer = <flask.json.tag.TaggedJSONSerializer object>¶
负载的python序列化程序。默认值是一个紧凑的JSON派生序列化程序,支持一些额外的Python类型,如日期时间对象或元组。
- session_class¶
- class flask.sessions.SecureCookieSession(initial=None)¶
基于签名cookie的会话的基类。
此会话后端将设置
modified
和accessed
属性。它不能可靠地跟踪会话是否是新的(而不是空的),因此:attr:new`仍然硬编码为``False`。- 参数:
initial (t.Any) --
- accessed = False¶
头,允许缓存代理为不同的用户缓存不同的页面。
- modified = False¶
更改数据时,将其设置为“True”。 仅跟踪会话字典本身; 如果会话包含可变数据(例如嵌套的dict),则在修改该数据时必须手动将其设置为“True”。 如果这是“True”,会话cookie将只写入响应。
- class flask.sessions.NullSession(initial=None)¶
类,用于在会话不可用时生成更好的错误消息。仍允许对空会话进行只读访问,但设置失败。
- 参数:
initial (t.Any) --
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
如果找不到键,则返回默认值(如果给定);否则,引发KeyError。
- popitem(*args, **kwargs)¶
移除(键、值)对并将其作为二元组返回。
对按后进先出(LIFO)顺序返回。如果判定为空,则引发KeyError。
- setdefault(*args, **kwargs)¶
如果关键字不在字典中,则插入值为默认值的关键字。
如果键在字典中,则返回键的值,否则为默认值。
- class flask.sessions.SessionMixin¶
使用会话属性扩展基本字典。
- accessed = True¶
有些实现可以检测会话数据何时被读取或写入,并在发生这种情况时设置它。mixin默认值硬编码为
True
.
- modified = True¶
有些实现可以检测到对会话的更改,并在发生这种情况时设置此更改。mixin默认值硬编码为
True
.
注意
这个 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)¶
从给定的参数生成环境字典,向使用它的应用程序发出请求,并返回响应。
- 参数:
- 返回类型:
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()
直接通过。- 参数:
- 返回类型:
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应用程序。
应用程序全局¶
要仅将对一个请求有效的数据从一个函数共享到另一个函数,全局变量是不够的,因为它在线程化环境中会中断。FlASK为您提供了一个特殊的对象,以确保它只对活动请求有效,并且将为每个请求返回不同的值。简而言之:它做了正确的事情,就像它为 request
和 session
。
- 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 .
Changelog
在 0.10 版本加入.
- pop(name, default=<object object>)¶
按名称获取和删除属性。如
dict.pop()
.Changelog
在 0.11 版本加入.
- setdefault(name, default=None)¶
获取属性的值(如果存在),否则设置并返回默认值。如
dict.setdefault()
.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
或者,您也可以测试任何上下文绑定的对象(例如
request
或g
)对于真实性: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 版本加入.
- 返回类型:
- 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 版本加入.
- flask.has_app_context()¶
工作方式如下:func:`has_request_context`但适用于应用程序上下文。 您也可以对:data:`current_app`对象进行布尔检查。
Changelog
在 0.9 版本加入.
- 返回类型:
- 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
。
- 返回类型:
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()
。- 参数:
- 返回类型:
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) --
- 返回类型:
- 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 版本加入.
- 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
。last_modified (datetime | int | float | None) -- 上次为文件发送的修改时间,以秒为单位。如果未提供,它将尝试从文件路径检测它。
max_age (None | (int | t.Callable[[str | None], int | None])) -- 客户端应缓存文件的时间,以秒为单位。如果设置,
Cache-Control
将会是public
,否则它将是no-cache
以首选条件缓存。
- 返回类型:
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_fp
或attachment_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_etags
,cache_timeout
和conditional
添加了参数。默认行为是添加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()
。
- 返回类型:
Changelog
在 2.0 版本发生变更:
path
取代了filename
参数。在 2.0 版本加入: 已将实现转移到Werkzeug。这现在是一个包装器,用于传递一些特定于烧瓶的参数。
在 0.5 版本加入.
信息闪现¶
- flask.flash(message, category='message')¶
将消息闪烁到下一个请求。为了从会话中删除闪现的消息并将其显示给用户,模板必须调用
get_flashed_messages()
.Changelog
在 0.3 版本发生变更: category 参数已添加。
- 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` 参数。
JSON支持¶
FASK使用了Python的内置功能 json
默认情况下用于处理JSON的模块。可以通过分配不同的提供程序来更改JSON实现 flask.Flask.json_provider_class
或 flask.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) -- 把它当做要连载的字典。
- 返回类型:
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()
。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()
。- 参数:
- 返回类型:
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()
。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()
。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。
- dump(obj, fp, **kwargs)¶
将数据序列化为JSON并写入文件。
- loads(s, **kwargs)¶
将数据反序列化为JSON。
- load(fp, **kwargs)¶
将数据反序列化为JSON从文件中读取。
- class flask.json.provider.DefaultJSONProvider(app)¶
使用Python的内置功能提供JSON操作
json
类库。序列化以下附加数据类型:datetime.datetime
和datetime.date
序列化到 RFC 822 串。这与HTTP日期格式相同。uuid.UUID
序列化为字符串。dataclasses.dataclass
传递给dataclasses.asdict()
.Markup
(或任何带有__html__
方法)将调用__html__
方法获取字符串。
- 参数:
app (App) --
- static default(o)¶
将此函数应用于符合以下条件的任何对象
json.dumps()
不知道如何序列化。它应该返回有效的JSON类型或引发TypeError
。
- 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()
。设置某些参数的缺省值default
,ensure_ascii
,以及sort_keys
属性。- 参数:
obj (Any) -- 要序列化的数据。
kwargs (Any) -- 已传递给
json.dumps()
。
- 返回类型:
- loads(s, **kwargs)¶
将数据从字符串或字节反序列化为JSON。
- 参数:
kwargs (Any) -- 已传递给
json.loads()
。
- 返回类型:
标记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()
.
- register(tag_class, force=False, index=None)¶
使用此序列化程序注册新标记。
- class flask.json.tag.JSONTag(serializer)¶
用于定义类型标记的基类
TaggedJSONSerializer
.- 参数:
serializer (TaggedJSONSerializer) --
让我们来看一个添加了对 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)¶
使用给定的上下文按名称呈现模板。
- 参数:
template_name_or_list (str | jinja2.environment.Template | list[str | jinja2.environment.Template]) -- 要呈现的模板的名称。如果给出了一个列表,则将呈现存在的第一个名称。
context (Any) -- 要在模板中使用的变量。
- 返回类型:
- flask.render_template_string(source, **context)¶
根据给定的源字符串和给定的上下文呈现模板。
- flask.stream_template(template_name_or_list, **context)¶
按名称将具有给定上下文的模板呈现为流。这将返回一个字符串迭代器,该迭代器可用作来自视图的流响应。
- 参数:
template_name_or_list (str | jinja2.environment.Template | list[str | jinja2.environment.Template]) -- 要呈现的模板的名称。如果给出了一个列表,则将呈现存在的第一个名称。
context (Any) -- 要在模板中使用的变量。
- 返回类型:
Changelog
在 2.2 版本加入.
- flask.stream_template_string(source, **context)¶
将具有给定上下文的给定源字符串中的模板呈现为流。这将返回一个字符串迭代器,该迭代器可用作来自视图的流响应。
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 版本加入.
配置¶
- 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'])
- 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]
whereReader
implements aread
method.) -- 获取文件句柄并从文件返回已加载数据的映射的可调用对象。silent (bool) -- 如果该文件不存在,请忽略该文件。
text (bool) -- 以文本或二进制模式打开文件。
- 返回:
True
如果文件加载成功,则返回。- 返回类型:
Changelog
在 2.3 版本发生变更: 这个
text
参数已添加。在 2.0 版本加入.
- from_mapping(mapping=None, **kwargs)¶
像更新配置一样
update()
忽略具有非上键的项。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。
- from_prefixed_env(prefix='FLASK', *, loads=<function loads>)¶
加载所有以开头的环境变量
FLASK_
从配置密钥的环境密钥中删除前缀。值通过加载函数传递,以尝试将它们转换为比字符串更具体的类型。密钥已加载到
sorted()
秩序。默认加载函数尝试将值解析为任何有效的JSON类型,包括字典和列表。
可以通过使用双下划线分隔键来设置嵌套词典中的特定项 (
__
)。如果中间键不存在,它将被初始化为空字典。- 参数:
prefix (str) -- 加载以此前缀开头的环境变量,并用下划线分隔 (
_
)。loads (Callable[[str], Any]) -- 将每个字符串值传递给此函数,并使用返回值作为配置值。如果引发任何错误,则忽略该错误,并且该值保持为字符串。缺省值为
json.loads()
。
- 返回类型:
Changelog
在 2.1 版本加入.
- from_pyfile(filename, silent=False)¶
从python文件更新配置中的值。此函数的行为就像文件是作为模块导入的,
from_object()
功能。- 参数:
filename (str | os.PathLike) -- 配置的文件名。这可以是绝对文件名,也可以是相对于根路径的文件名。
silent (bool) -- 设置为
True
如果您希望对丢失的文件执行静默失败。
- 返回:
True
如果文件加载成功,则返回。- 返回类型:
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' }
当配置选项直接映射到函数或类构造函数中的关键字参数时,这通常很有用。
- 参数:
- 返回类型:
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 版本加入.
有用的内部结构¶
- class flask.ctx.RequestContext(app, environ, request=None, session=None)¶
请求上下文包含每个请求的信息。FlaskApp在请求开始时创建并推送它,然后在请求结束时弹出它。它将为提供的WSGI环境创建URL适配器和请求对象。
不要试图直接使用此类,而是使用
test_request_context()
和request_context()
创建此对象。当弹出请求上下文时,它将评估在应用程序上注册的所有函数以进行拆卸执行。(
teardown_request()
)请求上下文在请求结束时自动弹出。使用交互式调试器时,上下文将恢复为
request
仍然可以访问。类似地,测试客户端可以在请求结束后保留上下文。但是,tearDown函数可能已经关闭了一些资源,如数据库连接。- 参数:
app (Flask) --
environ (dict) --
request (Request | None) --
session (SessionMixin | None) --
- copy()¶
使用同一请求对象创建此请求上下文的副本。这可用于将请求上下文移动到不同的greenlet。因为实际的请求对象是相同的,所以除非锁定了对请求对象的访问,否则不能将请求上下文移动到其他线程。
Changelog
在 1.1 版本发生变更: 使用当前会话对象,而不是重新加载原始数据。这样可以防止 flask.session 指向过期的对象。
在 0.10 版本加入.
- 返回类型:
- match_request()¶
可以被子类重写以钩住请求的匹配。
- 返回类型:
None
- pop(exc=<object object>)¶
弹出请求上下文并通过此操作解除绑定。这还将触发执行
teardown_request()
装饰者。Changelog
在 0.9 版本发生变更: 增加了 exc 参数。
- 参数:
exc (BaseException | None) --
- 返回类型:
None
- flask.globals.request_ctx¶
海流
RequestContext
。如果请求上下文未处于活动状态,则访问此代理上的属性将引发RuntimeError
。这是一个内部对象,对于FlaskTM处理请求的方式至关重要。在大多数情况下,应该不需要访问它。你很可能想要
request
和session
取而代之的是。
- 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_app
和g
取而代之的是。
- class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)¶
用于向应用程序注册蓝图的临时持有者对象。此类的实例由
make_setup_state()
方法,然后传递给所有寄存器回调函数。- add_url_rule(rule, endpoint=None, view_func=None, **options)¶
向应用程序注册规则(以及可选的视图函数)的帮助器方法。端点将自动加上蓝图名称的前缀。
- app¶
对当前应用程序的引用
- blueprint¶
对创建此安装状态的蓝图的引用。
- first_registration¶
由于蓝图可以在应用程序中注册多次,而不是所有内容都希望在应用程序上注册多次,因此可以使用此属性来确定蓝图是否已在过去注册。
- subdomain¶
蓝图应该激活的子域,否则为' ' None ' ' '。
- url_defaults¶
带有URL默认值的字典,添加到用蓝图定义的每个URL中。
- url_prefix¶
应该用于蓝图上定义的所有URL的前缀。
信号¶
- 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_request
至False
为了提高效率,除非您需要将请求全局数据存储在self
。- classmethod as_view(name, *class_args, **class_kwargs)¶
将类转换为可以为路由注册的视图函数。
默认情况下,生成的视图将为每个请求创建view类的新实例,并调用其
dispatch_request()
方法。如果视图类设置了init_every_request
至False
,则每个请求都将使用相同的实例。除了
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"]
)作为route
和add_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路由注册¶
通常有三种方法来定义路由系统的规则:
你可以使用
flask.Flask.route()
装饰者。你可以使用
flask.Flask.add_url_rule()
功能。您可以直接访问底层的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的唯一性,以便应用以下规则:
如果规则以斜线结尾,并且用户在请求时没有斜线,则会自动将用户重定向到带有尾随斜线的同一页。
如果规则没有以尾随斜杠结尾,并且用户请求页面以尾随斜杠结尾,则会引发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/
. 如果你的路线 GET
和 POST
请求,确保默认路由只处理 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 |
向提供的终结点提供请求时要调用的函数。如果未提供此功能,则可以在以后通过将其存储在 |
defaults |
具有此规则默认设置的词典。有关默认设置的工作原理,请参阅上面的示例。 |
subdomain |
在使用子域匹配的情况下指定子域的规则。如果未指定,则假定为默认子域。 |
**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) -- 此调用的信息名称。通常,这是脚本或命令最具描述性的名称。对于顶层脚本,它通常是脚本的名称,对于下面的命令,它是命令的名称。
parent (click.core.Context | None) -- 父上下文(如果可用)。
extra (Any) -- 转发给上下文构造函数的额外关键字参数。
- 返回类型:
在 8.0 版本发生变更: 添加了
context_class
属性。
- 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¶
(可选)flask应用程序的导入路径。
- create_app¶
(可选)传递脚本信息以创建应用程序实例的函数。
- flask.cli.load_dotenv(path=None)¶
按优先顺序加载“dotenv”文件以设置环境变量。
如果已经设置了env var,则不会覆盖它,因此列表中的早期文件优先于后期文件。
如果 python-dotenv 未安装。
- 参数:
path (str | os.PathLike | None) -- 在该位置加载文件,而不是搜索。
- 返回:
如果加载了文件,则为“True”。
- 返回类型:
Changelog
在 2.0 版本发生变更: 当前目录不会更改为加载文件的位置。
在 2.0 版本发生变更: 加载环境文件时,将默认编码设置为UTF-8。
在 1.1.0 版本发生变更: 返回
False
如果没有指定路径,则在未安装dot-env文件时。在 1.0 版本加入.
- flask.cli.with_appcontext(f)¶
包装回调,以确保它与脚本的应用程序上下文一起执行。
在下注册的自定义命令(及其选项)
app.cli
或blueprint.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’选项启用重载程序和调试器。