API

本部分文档涵盖了Flask的所有接口。对于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)

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 被添加。

Changelog
参数:
  • import_name -- 应用程序包的名称
  • static_url_path -- 可用于为Web上的静态文件指定其他路径。默认为 static_folder 文件夹。
  • static_folder -- 应在其中提供静态文件的文件夹 static_url_path. 默认为 'static' 应用程序根路径中的文件夹。
  • static_host -- 添加静态路由时要使用的主机,默认为无。使用时需要 host_matching=True 用一个 static_folder 配置。
  • host_matching -- 设置 url_map.host_matching 属性。默认为false。
  • subdomain_matching -- 当匹配路线时,相对于 SERVER_NAME,考虑子域 。默认为false。
  • template_folder -- 包含应用程序应使用的模板的文件夹。默认为应用程序根路径中的文件夹 'templates'
  • instance_path -- 应用程序的备用实例路径。默认情况下,文件夹 'instance' 假定包或模块旁边是实例路径。
  • instance_relative_config -- 如果将用于加载配置的相对文件名设置为' ' True ' ',则假定该配置相对于实例路径而不是应用程序根目录。
  • root_path -- 默认情况下,flask将自动计算应用程序根目录的路径。在某些情况下,这是无法实现的(例如,如果包是python 3名称空间包),需要手动定义。
add_template_filter(f, name=None)

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

参数:name -- 筛选器的可选名称,否则将使用函数名。
add_template_global(f, name=None)

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

0.10 新版功能.

Changelog
参数:name -- 全局函数的可选名称,否则将使用函数名称。
add_template_test(f, name=None)

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

0.10 新版功能.

Changelog
参数:name -- 测试的可选名称,否则将使用函数名。
add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)

连接URL规则。工作原理和 route() 装饰者很像。如果提供了视图“func”,它将在端点注册。

基本上这个例子:

@app.route('/')
def index():
    pass

相当于以下内容:

def index():
    pass
app.add_url_rule('/', 'index', index)

如果未提供视图“func”,则需要将端点连接到视图函数,如下所示:

app.view_functions['index'] = index

内部的 route() 调用 add_url_rule(), 因此,如果您想通过子类化定制行为,您只需要更改这个方法。

有关更多信息,请参阅 URL路由注册 .

在 0.6 版更改: OPTIONS 自动添加为方法。

在 0.2 版更改: view_func 参数已添加。

Changelog
参数:
  • rule -- 作为字符串的URL规则
  • endpoint -- 已注册的URL规则的终结点。flask本身采用视图函数的名称作为端点
  • view_func -- 向提供的端点提供请求时要调用的函数
  • provide_automatic_options -- 控制是否 OPTIONS 方法应自动添加。也可以在添加规则之前设置``view_func.provide_automatic_options = False`` 。
  • options -- 要转发到基础的选项 Rule 对象。对Werkzeug的一个更改是处理方法选项。方法是这个规则应该限制的方法列表(' ' GET ' ', ' ' POST ' '等)。默认情况下,规则只侦听' ' GET ' '(并隐式地侦听' ' HEAD ')。从Flask 0.6开始,' ' OPTIONS ' '被隐式地添加,并由标准的请求处理程序处理。
after_request(f)

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

函数必须采用一个参数,即 response_class 并返回新的响应对象或相同的对象(请参见 process_response()

从flask 0.7开始,如果发生未处理的异常,可能不会在请求结束时执行此函数。

after_request_funcs = None

一个字典,包含在每个请求之后应该调用的函数列表。字典的键是这个函数活动的blueprint的名称,' ' None ' '用于所有请求。例如,这可以用于关闭数据库连接。要在这里注册一个函数,请使用:meth: ' after_request '装饰器。

app_context()

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

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

with app.app_context():
    init_db()

请详见 应用情境 .

0.9 新版功能.

Changelog
app_ctx_globals_class

flask.ctx._AppCtxGlobals 的别名

auto_find_instance_path()

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

0.8 新版功能.

Changelog
before_first_request(f)

在向该应用程序实例发出第一个请求之前注册要运行的函数。

将在不带任何参数的情况下调用函数,并忽略其返回值。

0.8 新版功能.

Changelog
before_first_request_funcs = None

将在对该实例的第一个请求开始时调用的函数列表。请使用 before_first_request() 装饰者注册函数。

0.8 新版功能.

Changelog
before_request(f)

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

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

在不带任何参数的情况下调用函数。如果它返回一个非none值,那么该值将被处理为视图中的返回值,并且将停止进一步的请求处理。

before_request_funcs = None

在每个请求开始时调用的函数列表的字典。字典的键是这个函数为其活动的蓝图的名称,或者是所有请求的“None”。使用:meth: ' before_request '装饰器注册一个函数。

blueprints = None

按名称列出字典中所附的所有蓝图。蓝图可以被附加多次,所以本词典不会告诉你它们被附加的频率。

0.7 新版功能.

Changelog
cli = None

此应用程序的单击命令行上下文。一旦发现了应用程序,这里注册的命令将显示在:command: ' flask '命令中。默认命令由flask本身提供,可以重写。

这是一个 click.Group 对象。

config = None

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

config_class

flask.config.Config 的别名

context_processor(f)

注册模板情境处理器函数。

create_global_jinja_loader()

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

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

0.7 新版功能.

Changelog
create_jinja_environment()

基于:attr: ' jinja_options '和:meth: ' select_jinja_autoescape '创建Jinja2环境。自从0.7版本开始,增加了Jinja2全局变量和初始化后的过滤器。重写此函数以自定义行为。

在 0.11 版更改: Environment.auto_reload 依据 TEMPLATES_AUTO_RELOAD 配置选项设置。

0.5 新版功能.

Changelog
create_url_adapter(request)

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

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

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

0.6 新版功能.

Changelog
debug

是否启用调试模式。当使用' ' flask run ' '启动开发服务器时,将显示一个交互式调试器,用于未处理的异常,当代码发生变化时,将重新加载服务器。这映射到 DEBUG 配置密钥。当 env``'development'``并被' ' FLASK_DEBUG ' '环境变量覆盖。 如果在代码中设置,它的行为可能不符合预期。

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

默认: True 如果 env'development' 或否则是 False

default_config = {'APPLICATION_ROOT': '/', 'DEBUG': None, 'ENV': None, 'EXPLAIN_TEMPLATE_LOADING': False, 'JSONIFY_MIMETYPE': 'application/json', 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'MAX_CONTENT_LENGTH': None, 'MAX_COOKIE_SIZE': 4093, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'PREFERRED_URL_SCHEME': 'http', 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'PROPAGATE_EXCEPTIONS': None, 'SECRET_KEY': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'SERVER_NAME': None, 'SESSION_COOKIE_DOMAIN': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_COOKIE_SECURE': False, 'SESSION_REFRESH_EACH_REQUEST': True, 'TEMPLATES_AUTO_RELOAD': None, 'TESTING': False, 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'USE_X_SENDFILE': False}

默认配置参数。

dispatch_request()

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

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

Changelog
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>`.

0.9 新版功能.

Changelog
do_teardown_request(exc=<object object>)

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

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

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

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

在 0.9 版更改: 增加了 exc 争论。

Changelog
endpoint(endpoint)

将函数注册为端点的修饰器。例子::

@app.endpoint('example.endpoint')
def example():
    return "example"
参数:endpoint -- 终结点的名称
env

应用程序运行的环境。flask和扩展可以启用基于环境的行为,例如启用调试模式。这映射到 ENV 配置密钥。这是由 FLASK_ENV 设置的。如果在代码中设置,则环境变量和的行为可能不符合预期。

在生产中部署时不启用开发。

默认: 'production'

error_handler_spec = None

所有已注册错误处理程序的字典。密钥是 None 对于应用程序上活动的错误处理程序,否则密钥是蓝图的名称。每个密钥指向另一个字典,其中密钥是HTTP异常的状态代码。特殊密钥 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

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

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

Changelog
参数:code_or_exception -- 作为处理程序的整数或任意异常的代码
extensions = None

扩展可以存储应用程序特定状态的位置。例如,扩展可以在这里存储数据库引擎和类似的东西。为了向后兼容,扩展应该这样注册自己:

if not hasattr(app, 'extensions'):
    app.extensions = {}
app.extensions['extensionname'] = SomeObject()

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

0.7 新版功能.

Changelog
full_dispatch_request()

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

0.7 新版功能.

Changelog
get_send_file_max_age(filename)

send_file() 函数提供默认缓存超时。

默认情况下,此函数从配置 current_app`返回 ``SEND_FILE_MAX_AGE_DEFAULT`

静态文件函数如 send_from_directory() 使用此函数,以及 send_file`在:data:`~flask.current_app`上也调用此函数当给定的缓存超时为 ``None`() 时。如果在 send_file() 上考虑超时,该超时就会被使用;否则,将调用此方法。

这允许子类在基于文件名发送文件时更改行为。例如,要将.js文件的缓存超时设置为60秒:

class MyFlask(flask.Flask):
    def get_send_file_max_age(self, name):
        if name.lower().endswith('.js'):
            return 60
        return flask.Flask.get_send_file_max_age(self, name)

0.9 新版功能.

Changelog
got_first_request

如果应用程序开始处理第一个请求,此属性设置为 True

0.8 新版功能.

Changelog
handle_exception(e)

当发生未捕获的异常时启动的默认异常处理。在调试模式下,将立即重新引发异常,否则将记录异常并使用500内部服务器错误的处理程序。如果不存在这样的处理程序,将显示默认的500内部服务器错误消息。

0.3 新版功能.

Changelog
handle_http_exception(e)

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

0.3 新版功能.

Changelog
handle_url_build_error(error, endpoint, values)

处理 :在 url_for`上处理class:`~werkzeug.routing.BuildError() .

handle_user_exception(e)

每当发生应处理的异常时,都会调用此方法。特殊情况是 HTTPException 由该函数转发给 handle_http_exception() 方法。此函数将返回响应值或使用相同的回溯重新引发异常。

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

0.7 新版功能.

Changelog
has_static_folder

这会是 True ,如果绑定到包的对象的容器具有静态文件的文件夹。

0.5 新版功能.

Changelog
import_name = None

此应用程序所属的包或模块的名称。一旦它由构造函数设置,就不要更改它。

inject_url_defaults(endpoint, values)

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

0.7 新版功能.

Changelog
instance_path = None

保留实例文件夹的路径。

0.8 新版功能.

Changelog
iter_blueprints()

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

0.11 新版功能.

Changelog
jinja_env

用于加载模板的jinja2环境。

jinja_environment

flask.templating.Environment 的别名

jinja_loader

此绑定到包的对象的Jinja加载程序。

0.5 新版功能.

Changelog
jinja_options = {'extensions': ['jinja2.ext.autoescape', 'jinja2.ext.with_']}

直接传递到jinja2环境的选项。

json_decoder

flask.json.JSONDecoder 的别名

json_encoder

flask.json.JSONEncoder 的别名

log_exception(exc_info)

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

0.8 新版功能.

Changelog
logger

这个 'flask.app' logger,是一个标准的python Logger .

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

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

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

0.3 新版功能.

Changelog
make_config(instance_relative=False)

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

0.8 新版功能.

Changelog
make_default_options_response()

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

0.7 新版功能.

Changelog
make_null_session()

创建丢失会话的新实例。我们建议替换 session_interface .

0.7 新版功能.

Changelog
make_response(rv)

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

参数:rv -- 视图函数的返回值。View函数必须返回响应。返回 None 或者不允许视图以不返回的方式结束。以下类型允许用于 view_rvstrunicode 在python 2)中,响应对象是以编码为utf-8的字符串作为主体创建的。 bytesstr 在python 2)中,以字节为主体创建响应对象。 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应用程序调用。结果用于创建响应对象。

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

Changelog
make_shell_context()

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

0.11 新版功能.

Changelog
name

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

0.8 新版功能.

Changelog
open_instance_resource(resource, mode='rb')

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

参数:
  • resource -- 资源的名称。要访问子文件夹中的资源,请使用正斜杠作为分隔符。
  • mode -- 资源文件打开模式,默认为“rb”。
open_resource(resource, mode='rb')

从应用程序的资源文件夹打开资源。要了解这是如何工作的,请考虑以下文件夹结构:

/myapplication.py
/schema.sql
/static
    /style.css
/templates
    /layout.html
    /index.html

如果你想打开 schema.sql 文件您将执行以下操作:

with app.open_resource('schema.sql') as f:
    contents = f.read()
    do_something_with(contents)
参数:
  • resource -- 资源的名称。要访问子文件夹中的资源,请使用正斜杠作为分隔符。
  • mode -- 资源文件打开模式,默认为“rb”。
open_session(request)

创建或打开新会话。默认实现将所有会话数据存储在签名的cookie中。这就要求 secret_key 被设置。我们建议替换 session_interface .

参数:request -- 一个实例 request_class .
permanent_session_lifetime

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

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

preprocess_request()

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

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

preserve_context_on_exception

返回的值 PRESERVE_CONTEXT_ON_EXCEPTION 如果设置了配置值,则返回合理的默认值。

0.7 新版功能.

Changelog
process_response(response)

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

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

Changelog
参数:response -- 一个 response_class 对象。
返回:新的响应对象或相同的对象必须是 response_class .
propagate_exceptions

返回的值 PROPAGATE_EXCEPTIONS 如果设置了配置值,则返回合理的默认值。

0.7 新版功能.

Changelog
register_blueprint(blueprint, **options)

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

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

参数:
  • blueprint -- 要注册的蓝图。
  • url_prefix -- 蓝图路由将以这个作为前缀。
  • subdomain -- 蓝图路由将在此子域上匹配。
  • url_defaults -- 蓝图路由将使用这些默认值作为视图参数。
  • options -- 其他关键字参数传递给 BlueprintSetupState . 它们可以在 record() 回调。

0.7 新版功能.

Changelog
register_error_handler(code_or_exception, f)

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

0.7 新版功能.

Changelog
request_class

flask.wrappers.Request 的别名

request_context(environ)

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

详见:doc:/reqcontext .

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

参数:environ -- wsgi环境
response_class

flask.wrappers.Response 的别名

root_path = None

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

route(rule, **options)

用于为给定的URL规则注册视图函数的修饰符。这和 add_url_rule() 原理相同,但用于装饰:

@app.route('/')
def index():
    return 'Hello World'

有关更多信息,请参阅 URL路由注册 .

参数:
  • rule -- 作为字符串的URL规则
  • endpoint -- 已注册的URL规则的终结点。flask本身采用视图函数的名称作为端点
  • options -- 要转发到基础的选项 Rule 对象。对Werkzeug的一个更改是处理方法选项。方法是这个规则应该限制的方法列表(' ' GET ' ', ' ' POST ' '等)。默认情况下,规则只侦听' ' GET ' '(并隐式地侦听' ' HEAD ')。从Flask 0.6开始,' ' OPTIONS ' '被隐式地添加,并由标准的请求处理程序处理。
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 -- 要侦听的主机名。设置为 '0.0.0.0' 使服务器也可以在外部使用。默认为 '127.0.0.1' 或者``SERVER_NAME``配置变量中的主机(如果存在)。
  • port -- web服务器的端口。默认为 5000 或在 SERVER_NAME 配置变中量定义的端口(如果存在)。
  • debug -- 如果给定,启用或禁用调试模式。见 debug .
  • load_dotenv -- 加载最近的 .env.flaskenv 用于设置环境变量的文件。也会将工作目录更改为包含在被找到的第一个文件的目录。
  • options -- 要转发到基础Werkzeug服务器的选项。更多信息见 werkzeug.serving.run_simple()

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

如果设置, FLASK_ENVFLASK_DEBUG 环境变量将覆盖 envdebug .

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

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

Changelog
save_session(session, response)

保存会话(如果需要更新)。对于默认配置,检查会话。我们建议替换 :class:`session_interface,而不是覆盖。

参数:
secret_key

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

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

select_jinja_autoescape(filename)

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

0.5 新版功能.

Changelog
send_file_max_age_default

A timedelta 被用作 send_file() 函数的缓存超时。默认值为12小时。

也可以从配置中使用 SEND_FILE_MAX_AGE_DEFAULT 配置密钥。这个配置变量也可以用整数值作为秒来设置。默认为 timedelta(hours=12)

send_static_file(filename)

内部使用的函数将静态文件从静态文件夹发送到浏览器。

0.5 新版功能.

Changelog

安全cookie将其用作会话cookie的名称。

也可以从配置中使用 SESSION_COOKIE_NAME 配置密钥。默认为 'session'

session_interface = <flask.sessions.SecureCookieSessionInterface object>

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

0.8 新版功能.

Changelog
shell_context_processor(f)

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

0.11 新版功能.

Changelog
shell_context_processors = None

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

0.11 新版功能.

Changelog
should_ignore_error(error)

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

0.10 新版功能.

Changelog
static_folder

配置的静态文件夹的绝对路径。

static_url_path

将为其注册静态路由的URL前缀。

teardown_appcontext(f)

注册应用程序上下文结束时要调用的函数。当弹出请求上下文时,通常也会调用这些函数。

例子::

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

当在上面的例子中执行``ctx.pop()``时,就会在应用程序上下文从活动上下文堆栈中移出之前调用拆卸函数。 如果您在测试中使用此类构造,这将变得相关。

由于请求情境通常还管理应用程序情境,因此在弹出请求情境时也会调用它。

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

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

0.9 新版功能.

Changelog
teardown_appcontext_funcs = None

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

0.9 新版功能.

Changelog
teardown_request(f)

无论是否存在异常,都要在每个请求结束时注册要运行的函数。 即使没有执行实际请求,也会在弹出请求上下文时执行这些功能。

例子::

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

当在上面的例子中执行``ctx.pop()``时,就会在请求上下文从活动上下文堆栈中移出之前调用拆卸函数。 如果您在测试中使用此类构造,这将变得相关。

通常拆机功能必须采取一切必要步骤,以避免它们失败。 如果他们确实执行了可能失败的代码,他们将不得不通过try / except语句和日志发生错误来围绕这些代码的执行。

当由于异常而调用TearDown函数时,它将传递一个错误对象。

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

调试注释

在调试模式下,flask不会立即终止对异常的请求。相反,它将使其保持活动状态,以便交互式调试器仍然可以访问它。这种行为可以通过``PRESERVE_CONTEXT_ON_EXCEPTION``配置变量来控制。

teardown_request_funcs = None

一种字典,其中包含在每次请求后调用的函数列表,即使发生异常也是如此。字典的密钥是此函数活动的蓝图的名称, None 所有请求。不允许这些函数修改请求,它们的返回值将被忽略。如果在处理请求时发生异常,则会将异常传递给每个拆卸请求函数。要在此处注册函数,请使用 teardown_request() 装饰者。

0.7 新版功能.

Changelog
template_context_processors = None

一种字典,其中包含在不带参数的情况下调用以填充模板上下文的函数列表。字典的密钥是此函数活动的蓝图的名称, None 所有请求。每个返回一个模板上下文更新所用的字典。要在此处注册函数,请使用 context_processor() 装饰者。

template_filter(name=None)

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

@app.template_filter()
def reverse(s):
    return s[::-1]
参数:name -- 筛选器的可选名称,否则将使用函数名。
template_folder = None

要添加到模板查找中的模板文件的位置。如果不应添加模板,则为 None

template_global(name=None)

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

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

0.10 新版功能.

Changelog
参数:name -- 全局函数的可选名称,否则将使用函数名称。
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

0.10 新版功能.

Changelog
参数:name -- 测试的可选名称,否则将使用函数名。
templates_auto_reload

更改模板后重新加载模板。被 :meth:`create_jinja_environment`使用 .

此属性可以配置为 TEMPLATES_AUTO_RELOAD . 如果未设置,将在调试模式下启用。

1.0 新版功能: 已添加此属性,但基础配置和行为已存在。

Changelog
test_cli_runner(**kwargs)

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

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

1.0 新版功能.

Changelog
test_cli_runner_class = None

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

1.0 新版功能.

Changelog
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

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

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

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

Changelog
test_client_class = None

使用`test_client`时使用的测试客户端。

0.7 新版功能.

Changelog
test_request_context(*args, **kwargs)

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

详见:doc:/reqcontext .

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

with 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 -- 其他位置参数传递给:class:~werkzeug.test.EnvironBuilder
  • kwargs -- 其他关键字参数传递给: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异常。

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

0.8 新版功能.

Changelog
update_template_context(context)

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

参数:context -- 作为字典的上下文,在适当的位置进行更新以添加额外的变量。
url_build_error_handlers = None

在以下情况下调用的函数列表:meth:url_for`引发a:exc:`~werkzeug.routing.BuildError。 这里注册的每个函数都会用 error, endpointvalues`调用。如果函数返回``None``或引发:exc:`BuildError,则尝试下一个函数。

0.9 新版功能.

Changelog
url_default_functions = None

一种字典,其中包含可以用作URL值预处理器的函数列表。密钥``None`` 这里用于应用程序范围的回调,否则键是蓝图的名称。这些函数中的每一个都有机会在用作视图函数的关键字参数之前修改URL值的字典。对于注册的每个函数,此函数还应提供 url_defaults() 函数,该函数自动再次添加以这种方式删除的参数。

0.7 新版功能.

Changelog
url_defaults(f)

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

url_map = None

: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_rule_class

werkzeug.routing.Rule 的别名

url_value_preprocessor(f)

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

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

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

url_value_preprocessors = None

包含在:attr:before_request_funcs`函数之前调用的函数列表的字典。 字典的密钥是此函数激活的蓝图的名称,或所有请求的“无”。 要注册函数,请使用:meth:`url_value_preprocessor

0.7 新版功能.

Changelog
use_x_sendfile

如果要使用X-Sendfile功能,请启用此功能。 请记住,服务器必须支持此功能。 这仅影响使用:func:`send_file`方法发送的文件。

0.2 新版功能.

Changelog

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

view_functions = None

已注册的所有视图函数的字典。密钥将是函数名,也用于生成URL,值是函数对象本身。要注册视图函数,请使用 route() 装饰者。

wsgi_app(environ, start_response)

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

app = MyMiddleware(app)

最好改为这样做:

app.wsgi_app = MyMiddleware(app.wsgi_app)

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

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

Changelog
参数:
  • environ -- WSGi环境。
  • start_response -- 接受状态代码、头列表和可选异常上下文以启动响应的可调用文件。

蓝图对象

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)

表示蓝图。 蓝图是一个对象,它记录了稍后将使用:class:~flask.blueprints.BlueprintSetupState`调用的函数,以便在主应用程序中注册函数或其他内容。 有关更多信息,请参阅:ref:`blueprints

0.7 新版功能.

Changelog
add_app_template_filter(f, name=None)

注册一个自定义模板过滤器,在应用程序范围内可用。如 Flask.add_template_filter`而不是蓝图。工作原理和 :meth:`app_template_filter() 装饰者一样。

参数:name -- 筛选器的可选名称,否则将使用函数名。
add_app_template_global(f, name=None)

注册自定义模板全局可用的应用程序范围。如 Flask.add_template_global() 而不是蓝图。工作原理和 app_template_global() 装饰者一样。

0.10 新版功能.

Changelog
参数:name -- 全局的可选名称,否则将使用函数名。
add_app_template_test(f, name=None)

注册一个自定义模板测试,在应用程序范围内可用。如 Flask.add_template_test() 而不是蓝图。工作原理和 app_template_test() 装饰者一样。

0.10 新版功能.

Changelog
参数:name -- 测试的可选名称,否则将使用函数名。
add_url_rule(rule, endpoint=None, view_func=None, **options)

如 :meth:`Flask.add_url_rule`但要有蓝图。:func:`url_for`函数的端点以蓝图的名称为前缀。

after_app_request(f)

如 :meth:`Flask.after_request`但要有蓝图。在每个请求之后执行这样的功能,即使在蓝图之外也是如此。

after_request(f)

Flask.after_request() 但要有蓝图。此函数仅在该蓝图的函数处理的每个请求之后执行。

app_context_processor(f)

Flask.context_processor() 但要有蓝图。这样的函数会在每个请求中执行,即使在蓝图之外。

app_errorhandler(code)

Flask.errorhandler() 但要有蓝图。这个处理程序用于所有请求,即使在蓝图之外。

app_template_filter(name=None)

注册一个自定义模板过滤器,在应用程序范围内可用。如 Flask.template_filter() 但要有蓝图。

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

注册自定义模板全局可用的应用程序范围。如 Flask.template_global() 但要有蓝图。

0.10 新版功能.

Changelog
参数:name -- 全局的可选名称,否则将使用函数名。
app_template_test(name=None)

注册一个自定义模板测试,在应用程序范围内可用。如 :meth:`Flask.template_test`但要有蓝图。

0.10 新版功能.

Changelog
参数:name -- 测试的可选名称,否则将使用函数名。
app_url_defaults(f)

等同于 url_defaults() 但适用范围广。

app_url_value_preprocessor(f)

等同于 url_value_preprocessor() 但适用范围广。

before_app_first_request(f)

Flask.before_first_request() . 这样的函数在应用程序的第一个请求之前执行。

before_app_request(f)

Flask.before_request() . 这样的函数在每个请求之前执行,即使是在蓝图之外。

before_request(f)

Flask.before_request() 但要有蓝图。此函数仅在该蓝图的函数处理的每个请求之前执行。

context_processor(f)

Flask.context_processor() 但要有蓝图。此函数仅对蓝图处理的请求执行。

endpoint(endpoint)

Flask.endpoint`但要有蓝图。这不会给端点加上蓝图名称的前缀,这必须由该方法的用户显式地完成。如果端点前面加上().`前缀,它将注册到当前蓝图,否则它将是一个与应用程序无关的端点。

errorhandler(code_or_exception)

注册一个仅对该蓝图有效的错误处理程序。请注意,路由不会在蓝图本地发生,因此通常不会由蓝图处理404的错误处理程序,除非它是在视图函数内引起的。另一个特殊情况是500内部服务器错误,它总是从应用程序中查找。

否则将作为 Flask 对象的 errorhandler() 装饰师。

get_send_file_max_age(filename)

send_file() 函数提供默认缓存超时。

默认情况下,此函数从配置 current_app`返回 ``SEND_FILE_MAX_AGE_DEFAULT`

静态文件函数如 send_from_directory() 使用此函数,以及 send_file`在:data:`~flask.current_app`上也调用此函数当给定的缓存超时为 ``None`() 时。如果在 send_file() 上考虑超时,该超时就会被使用;否则,将调用此方法。

这允许子类在基于文件名发送文件时更改行为。例如,要将.js文件的缓存超时设置为60秒:

class MyFlask(flask.Flask):
    def get_send_file_max_age(self, name):
        if name.lower().endswith('.js'):
            return 60
        return flask.Flask.get_send_file_max_age(self, name)

0.9 新版功能.

Changelog
has_static_folder

这会是 True ,如果绑定到包的对象的容器具有静态文件的文件夹。

0.5 新版功能.

Changelog
import_name = None

此应用程序所属的包或模块的名称。一旦它由构造函数设置,就不要更改它。

jinja_loader

此绑定到包的对象的Jinja加载程序。

0.5 新版功能.

Changelog
json_decoder = None

要使用的蓝图本地JSON解码器类。设置为 None 使用应用程序 json_decoder .

json_encoder = None

要使用的蓝图本地JSON解码器类。设置为 None 使用应用程序 json_encoder .

make_setup_state(app, options, first_registration=False)

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

open_resource(resource, mode='rb')

从应用程序的资源文件夹打开资源。要了解这是如何工作的,请考虑以下文件夹结构:

/myapplication.py
/schema.sql
/static
    /style.css
/templates
    /layout.html
    /index.html

如果你想打开 schema.sql 文件您将执行以下操作:

with app.open_resource('schema.sql') as f:
    contents = f.read()
    do_something_with(contents)
参数:
  • resource -- 资源的名称。要访问子文件夹中的资源,请使用正斜杠作为分隔符。
  • mode -- 资源文件打开模式,默认为“rb”。
record(func)

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

record_once(func)

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

register(app, options, first_registration=False)

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

参数:
  • app -- 正在注册此蓝图的应用程序。
  • options -- 关键字参数转发自 register_blueprint() .
  • first_registration -- 这是否是首次在应用程序上注册此蓝图。
register_error_handler(code_or_exception, f)

非decorator版本:meth:`errorhandler`错误附加函数,类似于:meth:`~flask.Flask.register_error_handler`应用程序范围的:class:`~flask.Flask`对象的函数但是对于错误处理程序 仅限于此蓝图。

0.11 新版功能.

Changelog
root_path = None

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

route(rule, **options)

如 :meth:`Flask.route`但要有蓝图。:func:`url_for`函数的端点以蓝图的名称为前缀。

send_static_file(filename)

内部使用的函数将静态文件从静态文件夹发送到浏览器。

0.5 新版功能.

Changelog
static_folder

配置的静态文件夹的绝对路径。

static_url_path

将为其注册静态路由的URL前缀。

teardown_app_request(f)

如 :meth:`Flask.teardown_request`但要有蓝图。这样一个函数是在分解每个请求时执行的,即使在蓝图之外。

teardown_request(f)

Flask.teardown_request() 但要有蓝图。此函数仅在删除由蓝图函数处理的请求时执行。当弹出请求上下文时,即使没有执行实际请求,也会执行拆卸请求功能。

template_folder = None

要添加到模板查找中的模板文件的位置。如果不应添加模板,则为 None

url_defaults(f)

此蓝图的URL默认值的回调函数。它是通过端点和值调用的,应该更新就地传递的值。

url_value_preprocessor(f)

将函数注册为此蓝图的URL值预处理器。它是在调用视图函数之前调用的,可以修改提供的URL值。

传入请求数据

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

底层的wsgi环境。

path
full_path
script_root
url
base_url
url_root

提供不同的方式查看当前 IRI . 假设您的应用程序正在侦听以下应用程序根目录::

http://www.example.com/myapplication

用户请求以下URI::

http://www.example.com/myapplication/%CF%80/page.html?x=y

在这种情况下,上述属性的值如下:

path u'/π/page.html'
full_path u'/π/page.html?x=y'
script_root u'/myapplication'
base_url u'http://www.example.com/myapplication/π/page.html'
url u'http://www.example.com/myapplication/π/page.html?x=y'
url_root u'http://www.example.com/myapplication/'
accept_charsets

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

accept_encodings

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

accept_languages

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

accept_mimetypes

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

access_route

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

classmethod application(f)

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

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

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

参数:f -- 可装饰的WSGi
返回:一个新的wsgi可调用
args

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

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

authorization

这个 Authorization 对象的解析形式。

base_url

url 但没有查询字符串,请参见: trusted_hosts .

blueprint

当前蓝图的名称

cache_control

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

close()

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

0.9 新版功能.

Changelog
content_encoding

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

0.9 新版功能.

Changelog
content_length

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

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

0.9 新版功能.

Changelog
content_type

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

cookies

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

data

如果传入的请求数据带有mimetype werkzeug无法处理,则将其作为字符串包含。

date

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

dict_storage_class

werkzeug.datastructures.ImmutableTypeConversionDict 的别名

endpoint

与请求匹配的终结点。这个和 view_args 可用于重建相同或已修改的URL。如果匹配时发生异常,则 None .

files

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

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

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

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

form

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

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

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

Changelog
form_data_parser_class

werkzeug.formparser.FormDataParser 的别名

classmethod from_values(*args, **kwargs)

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

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

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

Changelog
返回:请求对象
full_path

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

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

这会将来自客户机的缓冲传入数据读取到一个字节串中。默认情况下,这是缓存的,但可以通过设置更改该行为 cacheFalse.

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

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

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

0.9 新版功能.

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

解析并将数据作为JSON返回。 如果mimetype没有表示JSON(:mimetype:application / json,请参阅:meth:is_json),除非``force``为真,否则返回``None``。 如果解析失败,则调用:meth:on_json_loading_failed,并将其返回值用作返回值。

参数:
  • force -- 忽略mimetype并始终尝试解析json。
  • silent -- 静默分析错误并返回 None 相反。
  • cache -- 存储解析后的JSON以返回以进行后续调用。
headers

来自wsgi环境的头文件是不可变的 EnvironHeaders .

host

仅包括端口的主机(如果可用)。参见: trusted_hosts .

host_url

只有计划为IRI的主机。参见: trusted_hosts .

if_match

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

返回类型:ETags
if_modified_since

解析 If-Modified-Since 作为日期时间对象的头。

if_none_match

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

返回类型:ETags
if_range

解析 If-Range 标题。

0.7 新版功能.

Changelog
返回类型:IfRange
if_unmodified_since

解析 If-Unmodified-Since 作为日期时间对象的头。

is_json

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

0.11 新版功能.

Changelog
is_multiprocess

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

is_multithread

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

is_run_once

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

is_secure

如果请求是安全的,则为“True”。

is_xhr

如果请求是通过javascript xmlhttpRequest触发的,则为true。这只适用于支持 X-Requested-With 并将其设置为“xmlhttprequest”。这样做的库有原型库、jquery库和mochikit库,可能还有其他库。

0.13 版后已移除: X-Requested-With 不标准,不可靠。

Changelog
json

如果mimetype指示json,那么它将包含解析的json数据。( application/jsonis_json() ,否则 None .

list_storage_class

werkzeug.datastructures.ImmutableList 的别名

make_form_data_parser()

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

0.8 新版功能.

Changelog
max_content_length

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

max_forwards

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

method

请求方法。(例如 'GET''POST'

mimetype

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

mimetype_params

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

on_json_loading_failed(e)

调用如果 get_json() 解析失败,并且不会停止。如果此方法返回值,它将用作 get_json() . 默认实现引发了一个:class:`BadRequest`异常。

在 0.10 版更改: 提出:exc:`BadRequest`错误,而不是以JSON的形式返回错误消息。 如果您想要这种行为,可以通过子类化添加它。

0.8 新版功能.

Changelog
parameter_storage_class

werkzeug.datastructures.ImmutableMultiDict 的别名

path

请求的路径为Unicode。这有点像wsgi环境中的常规路径信息,但它始终包含一个前导斜杠,即使访问了url根。

pragma

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

query_string

作为原始字节串的URL参数。

range

解析 Range 标题。

0.7 新版功能.

Changelog
返回类型:Range
referrer

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

remote_addr

客户端的远程地址。

remote_user

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

routing_exception = None

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

scheme

URL方案(HTTP或HTTPS)。

0.7 新版功能.

Changelog
script_root

没有尾部斜杠的脚本的根路径。

stream

如果传入的表单数据没有使用已知的mimetype进行编码,则数据将未修改地存储在此流中以供使用。大多数情况下,使用 data 它将把数据作为字符串提供给您。流只返回一次数据。

不像 input_stream 此流受到适当的保护,您不能意外地读取超过输入长度的内容。Werkzeug将在内部始终引用此流来读取数据,这使得用进行筛选的流包装此对象成为可能。

在 0.9 版更改: 此流现在总是可用的,但稍后表单分析器可能会使用它。以前只有在没有进行解析时才设置流。

Changelog
url

重建的当前URL为IRI。参见: trusted_hosts .

url_charset

为URL假定的字符集。默认值为 charset .

0.6 新版功能.

Changelog
url_root

完整的URL根(带有主机名),这是作为IRI的应用程序根。参见: trusted_hosts .

url_rule = None

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

0.6 新版功能.

Changelog
user_agent

当前用户代理。

values

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

view_args = None

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

want_form_data_parsed

如果请求方法包含内容,则返回true。从werkzeug 0.9开始,如果传输内容类型,就会出现这种情况。

0.8 新版功能.

Changelog
flask.request

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

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

请求对象是 Request 子类并提供Werkzeug定义的所有属性。这只是对最重要的部分的快速概述。

响应对象

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 到你的子类。

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

在 1.0 版更改: 补充 max_cookie_size .

Changelog
headers

表示响应头的A Headers 对象。

status

具有响应状态的字符串。

status_code

响应状态为整数。

data

调用的描述符 get_data()set_data() . 这不应该使用,最终将被弃用。

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

解析并将数据作为JSON返回。 如果mimetype没有表示JSON(:mimetype:application / json,请参阅:meth:is_json),除非``force``为真,否则返回``None``。 如果解析失败,则调用:meth:on_json_loading_failed,并将其返回值用作返回值。

参数:
  • force -- 忽略mimetype并始终尝试解析json。
  • silent -- 静默分析错误并返回 None 相反。
  • cache -- 存储解析后的JSON以返回以进行后续调用。
is_json

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

0.11 新版功能.

Changelog

只读视图 MAX_COOKIE_SIZE 配置密钥。

在Werkzeug的文件中见 max_cookie_size

mimetype

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

设置cookie。参数与cookie中的相同 Morsel 对象,但它也接受Unicode数据。

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

参数:
  • key -- 要设置的cookie的键(名称)。
  • value -- cookie的值。
  • max_age -- 如果cookie应该只持续客户端的浏览器会话,那么应该是几秒钟,或者是“无”(默认)。
  • expires -- 应该是 datetime 对象或Unix时间戳。
  • path -- 将cookie限制为给定路径,默认情况下,它将跨越整个域。
  • domain -- 如果要设置跨域cookie。 例如,domain =“。example.com”``将设置一个可由域``www.example.com``foo.example.com``等读取的cookie。否则,一个cookie 只能由设置它的域读取。
  • secure -- 如果 True, cookie只能通过https提供
  • httponly -- 不允许javascript访问cookie。这是对cookie标准的扩展,可能不是所有浏览器都支持。
  • samesite -- 限制cookie的范围,使其仅在那些请求是“同一站点”时附加到请求。

会话

如果你已经设置 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”,则会话为:attr:`~flask.Flask.permanent_session_lifetime`秒。 默认值为31天。 如果设置为“False”(默认值),则会在用户关闭浏览器时删除会话。

会话接口

0.8 新版功能.

Changelog

会话界面提供了一种替换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()

0.8 新版功能.

Changelog

返回应为会话cookie设置的域。

如果已配置,则使用``SESSION_COOKIE_DOMAIN``,否则将回退到基于``SERVER_NAME``检测域。

一旦检测到(或者如果没有设置),则更新``SESSION_COOKIE_DOMAIN``以避免重新运行逻辑。

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

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

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

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

get_expiration_time(app, session)

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

is_null_session(obj)

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

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

make_null_session(app)

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

默认情况下这将创建 null_session_class

null_session_class

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

NullSession 的别名

open_session(app, request)

必须实现此方法,并且必须返回``None``以防由于配置错误导致加载失败或者实现类似接口的字典的会话对象的实例+类的方法和属性:class:SessionMixin

pickle_based = False

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

0.10 新版功能.

Changelog
save_session(app, session, response)

这是为返回的实际会话调用的 open_session() 在请求结束时。这仍然在请求上下文中调用,因此如果您绝对需要访问请求,可以这样做。

由会话后端用于确定 Set-Cookie 应为此响应设置此会话cookie的头。如果会话已被修改,则设置cookie。如果会议是永久性的, SESSION_REFRESH_EACH_REQUEST config为true,始终设置cookie。

如果删除了会话,则通常跳过此检查。

0.11 新版功能.

Changelog
class flask.sessions.SecureCookieSessionInterface

默认会话接口,通过:mod:`itsdangerous`模块将会话存储在已签名的cookie中。

static digest_method()

用于签名的哈希函数。默认值是sha1

key_derivation = 'hmac'

它支持的危险密钥派生的名称。默认值为hmac。

open_session(app, request)

必须实现此方法,并且必须返回``None``以防由于配置错误导致加载失败或者实现类似接口的字典的会话对象的实例+类的方法和属性:class:SessionMixin

salt = 'cookie-session'

在基于cookie的会话签名的密钥顶部应用的salt。

save_session(app, session, response)

这是为返回的实际会话调用的 open_session() 在请求结束时。这仍然在请求上下文中调用,因此如果您绝对需要访问请求,可以这样做。

serializer = <flask.json.tag.TaggedJSONSerializer object>

负载的python序列化程序。默认值是一个紧凑的JSON派生序列化程序,支持一些额外的Python类型,如日期时间对象或元组。

session_class

SecureCookieSession 的别名

class flask.sessions.SecureCookieSession(initial=None)

基于签名cookie的会话的基类。

此会话后端将设置 modifiedaccessed 属性。它不能可靠地跟踪会话是否是新的(而不是空的),因此:attr:new`仍然硬编码为``False`

accessed = False

头,允许缓存代理为不同的用户缓存不同的页面。

get(k[, d]) → D[k] if k in D, else d. d defaults to None.
modified = False

更改数据时,将其设置为“True”。 仅跟踪会话字典本身; 如果会话包含可变数据(例如嵌套的dict),则在修改该数据时必须手动将其设置为“True”。 如果这是“True”,会话cookie将只写入响应。

setdefault(k[, d]) → D.get(k,d), also set D[k]=d if k not in D
class flask.sessions.NullSession(initial=None)

类,用于在会话不可用时生成更好的错误消息。仍允许对空会话进行只读访问,但设置失败。

class flask.sessions.SessionMixin

使用会话属性扩展基本字典。

accessed = True

有些实现可以检测会话数据何时被读取或写入,并在发生这种情况时设置它。mixin默认值硬编码为 True .

modified = True

有些实现可以检测到对会话的更改,并在发生这种情况时设置此更改。mixin默认值硬编码为 True .

permanent

这反映了dict中的``'_permanent'``密钥。

注意

这个 PERMANENT_SESSION_LIFETIME 配置键也可以是以flask 0.8开头的整数。要么你自己去查,要么用 permanent_session_lifetime 应用程序上自动将结果转换为整数的属性。

测试客户端

class flask.testing.FlaskClient(*args, **kwargs)

工作方式类似于常规的Werkzeug测试客户机,当在``with``语句中使用时,Flask如何将请求上下文堆栈的清理推迟到``with``主体的末尾。有关如何使用此类的一般信息,请参阅 werkzeug.test.Client .

在 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.

Changelog

基本用法概述于:ref:`testing`一章。

open(*args, **kwargs)

采用与 EnvironBuilder 类相同的参数,并添加一些内容:您可以提供 EnvironBuilder 或者将wsgi环境作为唯一的参数,而不是 EnvironBuilder 参数和两个可选关键字参数(as-tuplebuffered) 这将更改返回值的类型或应用程序的执行方式。

在 0.5 版更改: 如果dict是作为`data`参数的dict中的文件提供的,则内容类型现在必须被称为`content_type`而不是`mimetype`。 这个更改是为了与以下内容保持一致:class:werkzeug.FileWrapper

follow_redirects`参数被添加到:func:`open
Changelog

附加参数:

参数:
  • as_tuple -- 以``(environ,result)``的形式返回一个元组
  • buffered -- 将此值设置为true以缓冲应用程序运行。这也将自动为您关闭应用程序。
  • follow_redirects -- 如果`Client`应该遵循HTTP重定向,则将其设置为True。
session_transaction(*args, **kwargs)

与A组合使用时 with 语句这将打开会话事务。这可用于修改测试客户机使用的会话。一旦 with 块被保留,会话被存储回。

with client.session_transaction() as session:
    session['value'] = 42

在内部,这是通过一个临时的测试请求上下文实现的,因为会话处理可能依赖于请求变量,所以该函数接受的参数与 test_request_context() 直接通过。

测试CLI转轮

class flask.testing.FlaskCliRunner(app, **kwargs)

A CliRunner 用于测试flask应用程序的CLI命令。通常使用 test_cli_runner() . 详见 测试CLI命令 .

invoke(cli=None, args=None, **kwargs)

在独立环境中调用CLI命令。 完整的方法见 CliRunner.invoke <click.testing.CliRunner.invoke>`文件。例子见 :ref:`testing-cli()

如果没有给出``obj``参数,则传递一个实例:class:~flask.cli.ScriptInfo,它知道如何加载正在测试的Flask应用程序。

参数:
  • cli -- 要调用的命令对象。默认为应用程序的 cli 组。
  • args -- 用于调用命令的字符串列表。
返回:

Result 对象。

应用程序全局

要只在一个函数和另一个函数之间共享对一个请求有效的数据,全局变量不够好,因为它会在线程环境中中断。flask为您提供了一个特殊的对象,确保它只对活动请求有效,并且为每个请求返回不同的值。简而言之:它做的是正确的事情,就像它做的那样 requestsession .

flask.g

一个名称空间对象,可以在:doc:application context </ appcontext>`期间存储数据。 这是一个实例:attr:`Flask.app_ctx_globals_class,默认为:class:ctx._AppCtxGlobals

这是一个在请求期间存储资源的好地方。在测试期间,您可以使用 伪造资源和环境 预先配置此类资源的模式。

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

在 0.10 版更改: 绑定到应用程序上下文而不是请求上下文。

Changelog
class flask.ctx._AppCtxGlobals

一个普通的对象。 用作在应用程序上下文中存储数据的命名空间。

创建应用上下文会自动创建此对象,该对象可用作 g 代理。

'key' in g

检查属性是否存在。

0.10 新版功能.

Changelog
iter(g)

返回属性名的迭代器。

0.10 新版功能.

Changelog
get(name, default=None)

按名称或默认值获取属性。如:meth:dict.get .

参数:
  • name -- 要获取的属性的名称。
  • default -- 属性不存在时返回的值。

0.10 新版功能.

Changelog
pop(name, default=<object object>)

按名称获取和删除属性。如 dict.pop() .

参数:
  • name -- 要弹出的属性的名称。
  • default -- 属性不存在时返回的值,而不是引发 KeyError .

0.11 新版功能.

Changelog
setdefault(name, default=None)

获取属性的值(如果存在),否则设置并返回默认值。如 dict.setdefault() .

参数:name -- 要获取的属性的名称。
帕拉姆:默认值:如果属性不存在,则设置并返回的值。

0.11 新版功能.

Changelog

有用的函数和类

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

或者你也可以测试任何上下文绑定对象(例如:class:request`或:class:`g for truthness):

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

0.7 新版功能.

Changelog
flask.copy_current_request_context(f)

修饰函数以保留当前请求上下文的助手函数。这在与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 like you
        # would otherwise in the view function.
        ...
    gevent.spawn(do_some_work)
    return 'Regular response'

0.10 新版功能.

Changelog
flask.has_app_context()

工作方式如下:func:`has_request_context`但适用于应用程序上下文。 您也可以对:data:`current_app`对象进行布尔检查。

0.9 新版功能.

Changelog
flask.url_for(endpoint, **values)

使用提供的方法生成指向给定终结点的URL。

目标端点未知的变量参数作为查询参数附加到生成的URL中。如果查询参数的值为 None ,跳过整对。如果蓝图是活动的,您可以通过在本地端点前加上一个点来快捷地引用同一蓝图。( .

这将引用当前蓝图的本地索引函数:

url_for('.index')

更多信息,请前往 Quickstart .

要集成应用程序,:class:Flask`有一个钩子来拦截URL构建错误:attr:`Flask.url_build_error_handlers。 当前应用程序没有给定端点和值的URL时,url_for`函数会产生:exc:`~werkzeug.routing.BuildError。 如果是这样,:data:~flask.current_app`调用它:attr:`~Flask.url_build_error_handlers`如果它不是``None`,它可以返回一个字符串用作`url_for`的结果( 而不是`url_for`的默认值来引发:exc:`~werkzeug.routing.BuildError`异常)或重新引发异常。 一个例子::

def external_url_handler(error, endpoint, values):
    "Looks up an external URL when `url_for` cannot build a URL."
    # This is an example of hooking the build_error_handler.
    # Here, lookup_url is some utility function you've built
    # which looks up the endpoint in some external URL registry.
    url = lookup_url(endpoint, **values)
    if url is None:
        # External lookup did not have a URL.
        # Re-raise the BuildError, in context of original traceback.
        exc_type, exc_value, tb = sys.exc_info()
        if exc_value is error:
            raise exc_type, exc_value, tb
        else:
            raise error
    # url_for will use this result, instead of raising BuildError.
    return url

app.url_build_error_handlers.append(external_url_handler)

在这里, error 是的实例 BuildErrorendpointvalues 参数是否传递到 url_for. 请注意,这是为了在当前应用程序之外构建URL,而不是为了处理404个未找到的错误。

0.10 新版功能: 添加了`_scheme`参数。

0.9 新版功能: 添加了`_anchor`和`_method`参数。

0.9 新版功能: 调用:meth:Flask.handle_build_error on:exc:~werkzeug.routing.BuildError

Changelog
参数:
  • endpoint -- url的端点(函数名)
  • values -- url规则的变量参数
  • _external -- 如果设置为 True ,将生成一个绝对URL。服务器地址可以通过 SERVER_NAME 配置变量,默认为 localhost.
  • _scheme -- 指定所需URL方案的字符串。这个 _external True 或A ValueError 提高了。默认行为使用与当前请求相同的方案,或者 PREFERRED_URL_SCHEMEapp configuration 如果没有可用的请求上下文。从werkzeug 0.10开始,也可以将其设置为空字符串以构建与协议相关的URL。
  • _anchor -- 如果提供,则会将其作为锚定添加到URL。
  • _method -- 如果提供,则显式指定HTTP方法。
flask.abort(status, *args, **kwargs)

为给定的状态代码或WSGI应用程序引发:py:exc:HTTPException

abort(404)  # 404 Not Found
abort(Response('Hello World'))

可以传递wsgi应用程序或状态代码。如果给定了状态代码,它将在异常列表中查找并引发该异常;如果传递了一个wsgi应用程序,它将把它包装在代理wsgi异常中并引发该异常:

abort(404)
abort(Response('Hello World'))
flask.redirect(location, code=302, Response=None)

返回一个响应对象(wsgi应用程序),如果调用该对象,则将客户端重定向到目标位置。支持的代码是301、302、303、305和307。300不受支持,因为它不是一个真正的重定向,304是一个请求的答案,请求具有定义的if-modified-since头。

0.10 新版功能: 现在可以传入用于响应对象的类。

0.6 新版功能: 该位置现在可以是使用:func:`iri_to_uri`函数编码的unicode字符串。

Changelog
参数:
  • location -- 响应应重定向到的位置。
  • code -- 重定向状态代码。默认为302。
  • Response (class) -- 在实例化响应时使用的响应类。如果未指定,默认值为 werkzeug.wrappers.Response
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`函数。

0.6 新版功能.

Changelog
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!'

如果视图函数以外的函数想要修改响应,则此选项更有用。例如,考虑一个装饰器,它希望在不将返回值转换为响应对象的情况下添加一些头。

0.9 新版功能.

Changelog
flask.send_file(filename_or_fp, mimetype=None, as_attachment=False, attachment_filename=None, add_etags=True, cache_timeout=None, conditional=False, last_modified=None)

将文件的内容发送到客户端。这将使用可用和配置的最有效的方法。默认情况下,它将尝试使用wsgi服务器的文件包装支持。或者,您可以设置应用程序的 use_x_sendfile 属性到 True 直接发射 X-Sendfile 标题。但是,这需要对基础Web服务器的支持 X-Sendfile .

默认情况下,它将尝试为您猜测mimetype,但您也可以显式地提供一个mimetype。为了获得额外的安全性,您可能希望将某些文件作为附件发送(例如HTML)。mimetype猜测需要 filenameattachment_filename 提供。

如果提供`filename`,ETag也将自动附加。 你可以通过设置`add_etags = False`来关闭它。

如果提供`conditional = True`和`filename`,则此方法将尝试升级响应流以支持范围请求。 这将允许通过部分内容响应来回答请求。

请不要从用户源向此函数传递文件名; 相反应使用 send_from_directory()

在 1.0 版更改: 支持UTF-8文件名,如RFC 2231`_中所述。

在 0.12 版更改: 不再从文件对象自动推断文件名。 如果要使用自动mimetype和etag支持,请通过`filename_or_fp`或`attachment_filename`传递文件路径。

在 0.12 版更改: 对于MIME类型检测,attachment_filename`优先于`filename

在 0.9 版更改: 当没有应用程序配置时,缓存超时从应用程序配置中提取其默认值。

在 0.7 版更改: 对文件对象的mimetype猜测和etag支持被弃用,因为它不可靠。如果可以,请传递一个文件名,否则请自己附加一个etag。此功能将在Flask1.0中删除

0.5 新版功能: 添加了`add_etags`,`cache_timeout`和`conditional`参数。 现在默认行为是附加etags。

0.2 新版功能.

Changelog
参数:
  • filename_or_fp -- 要发送的文件的文件名。 如果指定了相对路径,这相对于:attr:~Flask.root_path。 或者,可能会提供一个文件对象,在这种情况下,``X-Sendfile``可能无法工作并回退到传统方法。 在调用:func:`send_file`之前,确保文件指针位于要发送的数据的开头。
  • mimetype -- 文件的mimetype(如果提供)。如果给定文件路径,自动检测将作为回退进行,否则将引发错误。
  • as_attachment -- 如果你想用``Content-Disposition:attachment``标题发送这个文件,设置为``True``。
  • attachment_filename -- 附件的文件名(如果与文件的文件名不同)。
  • add_etags -- 设置为 False 禁止附加电子标签。
  • conditional -- 设置为 True 启用条件响应。
  • cache_timeout -- 标头的超时秒数。 当``None``(默认值)时,该值由以下设置:meth:~Flask.get_send_file_max_age:data:~flask.current_app
  • last_modified -- 将``Last-Modified``标头设置为此值,a:class:`~datetime.datetime`或timestamp。 如果传递了文件,则会覆盖其mtime。
flask.send_from_directory(directory, filename, **options)

使用以下命令从给定目录发送文件:func:send_file。 这是一种从上传文件夹或类似内容快速公开静态文件的安全方法。

示例用法:

@app.route('/uploads/<path:filename>')
def download_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename, as_attachment=True)

发送文件和性能

强烈建议激活 X-Sendfile 支持您的Web服务器,或者(如果没有验证发生)告诉Web服务器自己为给定路径提供文件,而不调用Web应用程序以提高性能。

0.5 新版功能.

Changelog
参数:
  • directory -- 存储所有文件的目录。
  • filename -- 相对于要下载的目录的文件名。
  • options -- 可选的关键字参数直接转发到:func:send_file
flask.safe_join(directory, *pathnames)

安全地加入`directory`和零个或多个不受信任的`pathnames`组件。

示例用法:

@app.route('/wiki/<path:filename>')
def wiki_page(filename):
    filename = safe_join(app.config['WIKI_FOLDER'], filename)
    with open(filename, 'rb') as fd:
        content = fd.read()  # Read and process the file content...
参数:
  • directory -- 受信任的基目录。
  • pathnames -- 与该目录相关的不受信任的路径名。
引发:

NotFound 如果一条或多条经过的路径超出其边界。

flask.escape(s) → markup

将字符串S中的字符&、<、>、'和“转换为HTML安全序列”。如果需要在HTML中显示可能包含此类字符的文本,请使用此选项。将返回值标记为标记字符串。

class flask.Markup

可以安全地插入HTML或XML文档的字符串,可能是因为它被转义了,也可能是因为它被标记为安全。

将对象传递给构造函数会将其转换为文本并将其包装以将其标记为安全而不会转义。 要转义文本,请改用:meth:`escape`类方法。

>>> Markup('Hello, <em>World</em>!')
Markup('Hello, <em>World</em>!')
>>> Markup(42)
Markup('42')
>>> Markup.escape('Hello, <em>World</em>!')
Markup('Hello &lt;em&gt;World&lt;/em&gt;!')

这实现了 __html__() 一些框架使用的接口。传递实现的对象 __html__() 将包装该方法的输出,标记为安全。

>>> class Foo:
...     def __html__(self):
...         return '<a href="/foo">foo</a>'
...
>>> Markup(Foo())
Markup('<a href="/foo">foo</a>')

这是文本类型的子类( str 在Python 3中, unicode 在Python 2中)。它具有与该类型相同的方法,但所有方法都会转义其参数并返回 Markup 实例。

>>> Markup('<em>%s</em>') % 'foo & bar'
Markup('<em>foo &amp; bar</em>')
>>> Markup('<em>Hello</em> ') + '<foo>'
Markup('<em>Hello</em> &lt;foo&gt;')
classmethod escape(s)

调用:func:`escape`并确保为子类返回正确的类型。

striptags()

标记:meth:unescape 、删除标记并将空白规范化为单个空格。

>>> Markup('Main &raquo;        <em>About</em>').striptags()
'Main » About'
unescape()

将转义标记转换回文本字符串。这将用HTML实体所代表的字符替换HTML实体。

>>> Markup('Main &raquo; <em>About</em>').unescape()
'Main » <em>About</em>'

信息闪现

flask.flash(message, category='message')

将消息闪烁到下一个请求。为了从会话中删除闪现的消息并将其显示给用户,模板必须调用 get_flashed_messages() .

在 0.3 版更改: category 参数已添加。

Changelog
参数:
  • message -- 要闪现的信息。
  • category -- 消息的类别。 建议使用以下值:'message'``用于任何类型的消息,'error'用于错误,'info'用于信息消息,''warning'``用于警告。 但是,任何类型的字符串都可以用作类别。
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 将消息筛选为只匹配所提供类别的消息。

有关示例,请参阅:ref:message-flashing-pattern

在 0.9 版更改: 已添加`category_filter` 参数。

在 0.3 版更改: 已添加`with_categories` 参数。

Changelog
参数:
  • with_categories -- 设置为“True”以接收类别。
  • category_filter -- 类别的白名单以限制返回值

JSON支持

Flask使用``simplejson``进行JSON实现。 由于simplejson既由标准库提供,也由扩展提供,Flask将首先尝试simplejson然后再回到stdlib json模块。除此之外,它还将委托访问当前应用程序的JSON编码器和解码器,以便于定制。

所以对于初学者而不是做:

try:
    import simplejson as json
except ImportError:
    import json

你可以这样做:

from flask import json

有关用法示例,请阅读标准库中的:mod:`json`文档。 默认情况下,以下扩展应用于stdlib的JSON模块:

  1. 这``datetime``对象被序列化为:rfc:`822`字符串。
  2. 任何带有 __html__ 方法(类) Markup )将调用该方法,然后将返回值序列化为字符串。

这个json模块的:func:~htmlsafe_dumps`函数也可用作Jinja2中名为``| tojson``的过滤器。 请注意,在Flask 0.10之前的Flask版本中,如果要在``script``标记内使用``| tojson``输出,则必须使用``| safe``禁用转义。 在Flask 0.10及更高版本中,这会自动发生(但包括 ``|safe` 不管怎样)。

<script type=text/javascript>
    doSomethingWith({{ user.username|tojson|safe }});
</script>

自动排序JSON键

配置变量 JSON_SORT_KEYS配置管理 )可以设置为false以阻止Flask 自动排序键。默认情况下,启用排序,并启用应用程序外部上下文排序。

请注意,在使用基于内容的HTTP缓存和Python的散列随机化特性时,禁用密钥排序可能会导致问题。

flask.json.jsonify(*args, **kwargs)

这个函数包装:func:dumps`添加一些增强功能,使生活更轻松。 它将JSON输出转换为:class:〜flask.Response`对象,其中包含:mimetype:application / json mimetype。 为方便起见,它还将多个参数转换为数组或将多个关键字参数转换为dict。 这意味着``jsonify(1,2,3)``和``jsonify([1,2,3])``序列化为``[1,2,3]``。

为清楚起见,JSON序列化行为与以下区别:func:dumps

  1. 单个参数:直接传递给 dumps() .
  2. 多个参数:在传递到之前转换为数组 dumps() .
  3. 多个关键字参数:在传递到之前转换为dict dumps() .
  4. Args和kwargs:行为未定义,将引发异常。

示例用法:

from flask import jsonify

@app.route('/_get_current_user')
def get_current_user():
    return jsonify(username=g.user.username,
                   email=g.user.email,
                   id=g.user.id)

这将向浏览器发送这样的JSON响应:

{
    "username": "admin",
    "email": "admin@localhost",
    "id": 42
}

在 0.11 版更改: 增加了对顶级数组序列化的支持。这在古代浏览器中引入了安全风险。有关详细信息见 JSON安全性

Changelog

如果 JSONIFY_PRETTYPRINT_REGULAR config参数设置为true或flask应用程序正在调试模式下运行。压缩(不是很漂亮)格式目前意味着没有缩进和分隔符后没有空格。

0.2 新版功能.

Changelog
flask.json.dumps(obj, **kwargs)

如果堆栈上有应用程序,则使用应用程序配置的编码器(:attr:~flask.Flask.json_encoder)将``obj``序列化为JSON格式的``str``。

默认情况下,此函数可以返回``unicode``字符串或ascii-only字符串,自动强制转换为unicode字符串。 默认情况下,该行为由``JSON_AS_ASCII``配置变量控制,可以通过simplejson``inscument_ascii``参数覆盖。

flask.json.dump(obj, fp, **kwargs)

dumps() 但写入文件对象。

flask.json.loads(s, **kwargs)

如果堆栈上有应用程序,则使用应用程序配置的解码器(:attr:~flask.Flask.json_decoder)从字符串`s``中反序列化JSON对象。

flask.json.load(fp, **kwargs)

loads() 但从文件对象读取。

class flask.json.JSONEncoder(skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

默认flask json编码器。这个扩展扩展了默认的simplejson编码器,它还支持 datetime 物体, UUID 以及 Markup 对象,其序列化为RFC822日期时间字符串(与HTTP日期格式相同)。为了支持更多的数据类型,请重写 default() 方法。

default(o)

在子类中实现此方法,以便它返回的可序列化对象 o 或调用基本实现(以引发 TypeError

例如,为了支持任意迭代器,可以实现如下的默认值:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    return JSONEncoder.default(self, o)
class flask.json.JSONDecoder(object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

默认的JSON解码器。这个不会改变默认simplejson解码器的行为。查阅 json 有关详细信息的文档。此解码器不仅用于此模块的加载功能,而且还用于 Request .

标记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字符串。

loads(value)

从JSON字符串加载数据并反序列化任何标记对象。

register(tag_class, force=False, index=None)

使用此序列化程序注册新标记。

参数:
  • tag_class -- 要注册的标记类。将用此序列化程序实例实例化。
  • force -- 覆盖现有标记。如果为假(默认),则为 KeyError 提高了。
  • index -- 索引以按标记顺序插入新标记。当新标记是现有标记的特殊情况时很有用。如果 None (默认),标记将附加到订单末尾。
引发:

KeyError -- 如果标记密钥已经注册并且 force 不是真的。

tag(value)

如有必要,将值转换为带标记的表示形式。

untag(value)

将标记的表示形式转换回原始类型。

class flask.json.tag.JSONTag(serializer)

用于定义类型标记的基类 TaggedJSONSerializer .

check(value)

检查给定值是否应使用此标记进行标记。

key = None

用于标记序列化对象的标记。如果 None ,此标记仅在标记期间用作中间步骤。

tag(value)

将该值转换为有效的JSON类型,并在其周围添加标记结构。

to_json(value)

将python对象转换为有效JSON类型的对象。稍后将添加标记。

to_python(value)

将JSON表示转换回正确的类型。标签将被删除。

让我们看一个增加对class:~collections.OrderedDict`的支持的例子。 Dicts没有Python或JSON的顺序,所以为了处理这个,我们将把项目转储为``[key,value]``对的列表。 子类:class:`JSONTag`并给它新的键`'od'``来识别类型。 会话序列化器首先处理dicts,因此在订单的前面插入新标签,因为``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 -- 要呈现的模板的名称,或具有模板名称的iterable将呈现第一个现有模板的名称
  • context -- 模板上下文中应该可用的变量。
flask.render_template_string(source, **context)

使用给定的上下文呈现给定模板源字符串中的模板。模板变量将自动转义。

参数:
  • source -- 要呈现的模板的源代码
  • context -- 模板上下文中应该可用的变量。
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')

0.2 新版功能.

Changelog
参数:
  • template_name -- 模板的名称
  • attribute -- 要访问的宏变量的名称

配置

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 -- 从中相对读取文件的路径。当应用程序创建配置对象时,这是应用程序的 root_path .
  • defaults -- 默认值的可选字典
from_envvar(variable_name, silent=False)

从指向配置文件的环境变量加载配置。这基本上只是一个快捷方式,对于这一行代码,它有更好的错误消息:

app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
参数:
  • variable_name -- 环境变量的名称
  • silent -- 设置为 True 如果您希望对丢失的文件执行静默失败。
返回:

布尔。 True``如果能够加载配置,否则``False

from_json(filename, silent=False)

从JSON文件更新配置中的值。此函数的行为类似于JSON对象是一个字典并传递给 from_mapping() 功能。

参数:
  • filename -- json文件的文件名。这可以是绝对文件名,也可以是相对于根路径的文件名。
  • silent -- 设置为 True 如果您希望对丢失的文件执行静默失败。

0.11 新版功能.

Changelog
from_mapping(*mapping, **kwargs)

像更新配置一样 update() 忽略具有非上键的项。

0.11 新版功能.

Changelog
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)

不应使用此函数加载实际配置,而应使用配置默认值。实际配置应加载 from_pyfile() 最好是从不在包内的位置安装,因为包可能在系统范围内安装。

请参阅:ref:config-dev-prod`以获取基于类的配置示例:meth:`from_object

参数:obj -- 导入名称或对象
from_pyfile(filename, silent=False)

从python文件更新配置中的值。此函数的行为就像文件是作为模块导入的, from_object() 功能。

参数:
  • filename -- 配置的文件名。这可以是绝对文件名,也可以是相对于根路径的文件名。
  • silent -- 设置为 True 如果您希望对丢失的文件执行静默失败。

0.7 新版功能: silent 参数。

Changelog
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 -- 配置命名空间
  • lowercase -- 指示结果字典的键是否应为小写的标志
  • trim_namespace -- 指示结果字典的键是否不应包括命名空间的标志

0.11 新版功能.

Changelog

助流器

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()))

0.9 新版功能.

Changelog

有用的内部结构

class flask.ctx.RequestContext(app, environ, request=None)

请求上下文包含所有与请求相关的信息。它在请求开始时创建并推送到 _request_ctx_stack 在它的末端被移除。它将为所提供的wsgi环境创建URL适配器和请求对象。

不要试图直接使用此类,而是使用 test_request_context()request_context() 创建此对象。

当弹出请求上下文时,它将评估在应用程序上注册的所有函数以进行拆卸执行。( teardown_request()

请求上下文会在请求结束时自动弹出。在调试模式下,如果发生异常,请求上下文将保留在周围,这样交互式调试器就有机会对数据进行自省。使用0.4,对于未失败的请求以及 DEBUG 模式。通过设置 'flask._preserve_context'True 在wsgi环境中,上下文不会在请求结束时自动弹出。它被 test_client() 例如,实现延迟清理功能。

如果您需要一段时间内来自本地上下文的信息,您可能会发现这对UnitTests很有帮助。确保正确 pop() 在这种情况下将自己堆叠起来,否则单元测试将泄漏内存。

copy()

使用同一请求对象创建此请求上下文的副本。这可用于将请求上下文移动到不同的greenlet。因为实际的请求对象是相同的,所以除非锁定了对请求对象的访问,否则不能将请求上下文移动到其他线程。

0.10 新版功能.

Changelog
match_request()

可以被子类重写以钩住请求的匹配。

pop(exc=<object object>)

弹出请求上下文并通过此操作解除绑定。这还将触发执行 teardown_request() 装饰者。

在 0.9 版更改: 增加了 exc 争论。

Changelog
push()

将请求上下文绑定到当前上下文。

flask._request_ctx_stack

内部:class:~werkzeug.local.LocalStack,它包含:class:~flask.ctx.RequestContext`实例。通常情况下, :data:`requestsession 应该访问代理而不是堆栈。在扩展代码中访问堆栈可能很有用。

堆栈的每个层上始终存在以下属性:

app
活动Flask应用程序。
url_adapter
用于匹配请求的URL适配器。
request
当前请求对象。
session
活动会话对象。
g
具有所有属性的对象 flask.g 对象。
flashes
闪存消息的内部缓存。

示例用法:

from flask import _request_ctx_stack

def get_session():
    ctx = _request_ctx_stack.top
    if ctx is not None:
        return ctx.session
class flask.ctx.AppContext(app)

应用程序上下文将应用程序对象隐式绑定到当前线程或greenlet,类似于 RequestContext 绑定请求信息。如果创建了请求上下文,但应用程序不在单个应用程序上下文之上,则还隐式创建应用程序上下文。

pop(exc=<object object>)

弹出应用程序上下文。

push()

将应用程序上下文绑定到当前上下文。

flask._app_ctx_stack

内部:class:~werkzeug.local.LocalStack,它包含:class:~flask.ctx.AppContext`实例。通常情况下, :data:`current_appg 应该访问代理而不是堆栈。扩展可以作为存储数据的命名空间访问堆栈上的上下文。

0.9 新版功能.

Changelog
class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)

用于向应用程序注册蓝图的临时持有者对象。此类的实例由 make_setup_state() 方法,然后传递给所有寄存器回调函数。

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

向应用程序注册规则(以及可选的视图函数)的帮助器方法。端点将自动加上蓝图名称的前缀。

app = None

对当前应用程序的引用

blueprint = None

对创建此安装状态的蓝图的引用。

first_registration = None

由于蓝图可以在应用程序中注册多次,而不是所有内容都希望在应用程序上注册多次,因此可以使用此属性来确定蓝图是否已在过去注册。

options = None

一个字典,其中包含传递给:meth:`~flask.Flask.register_blueprint`方法的所有选项。

subdomain = None

蓝图应该激活的子域,否则为' ' None ' ' '。

url_defaults = None

带有URL默认值的字典,添加到用蓝图定义的每个URL中。

url_prefix = None

应该用于蓝图上定义的所有URL的前缀。

信号

0.6 新版功能.

Changelog
signals.signals_available

如果信号系统可用,则为True。这是安装“blinker”_时的情况。

Flask中存在以下信号:

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

当请求处理期间发生异常时,发送此信号。它被发送 before 标准异常处理开始,甚至在调试模式下也不会发生异常处理。异常本身作为 exception.

订阅服务器示例:

def log_exception(sender, exception, **extra):
    sender.logger.debug('Got exception during processing: %s', exception)

from flask import got_request_exception
got_request_exception.connect(log_exception, app)
flask.request_tearing_down

当请求被终止时,这个信号被发送。即使导致异常,也始终调用此函数。当前,侦听此信号的函数是在常规拆卸处理程序之后调用的,但这不是您可以依赖的。

订阅服务器示例:

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

此信号在应用程序上下文被破坏时发送。即使导致异常,也始终调用此函数。当前,侦听此信号的函数是在常规拆卸处理程序之后调用的,但这不是您可以依赖的。

订阅服务器示例:

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'

0.10 新版功能.

Changelog
flask.appcontext_popped

当弹出应用程序上下文时发送此信号。发件人是应用程序。这通常与 appcontext_tearing_down 信号。

0.10 新版功能.

Changelog
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)

0.10 新版功能.

Changelog
class signals.Namespace

如果blinker可用,则为:class:`blinker.base.Namespace`的别名,否则为创建伪信号的虚拟类。 此类适用于希望提供与Flask本身相同的后备系统的Flask扩展。

signal(name, doc=None)

如果blinker可用,则为该命名空间创建一个新信号,否则返回一个伪信号,该信号具有一个send方法,该方法将无效,但会因所有其他操作(包括连接)而失败:exc:RuntimeError

基于类的视图

0.7 新版功能.

Changelog
class flask.views.View

使用视图函数的替代方法。子类必须实现 dispatch_request() 使用URL路由系统中的视图参数调用。如果 methods 提供的方法不必传递给 add_url_rule() 方法显式::

class MyView(View):
    methods = ['GET']

    def dispatch_request(self, name):
        return 'Hello %s!' % name

app.add_url_rule('/hello/<name>', view_func=MyView.as_view('myview'))

当您想要装饰一个可插入的视图时,您必须在创建视图函数时这样做(通过包装 as_view() )或者你可以使用 decorators 属性:

class SecretView(View):
    methods = ['GET']
    decorators = [superuser_required]

    def dispatch_request(self):
        ...

当创建视图函数时,存储在decorators列表中的decorator将逐个应用。注意你可以 not 使用基于类的装饰器,因为它们将装饰视图类,而不是生成的视图函数!

classmethod as_view(name, *class_args, **class_kwargs)

将类转换为可与路由系统一起使用的实际视图函数。在内部,这将生成一个动态函数,该函数将实例化 View 在每次请求时,调用 dispatch_request() 方法。

传递给:meth:`as_view`的参数被转发给类的构造函数。

decorators = ()

修饰基于类的视图的规范方法是将返回值修饰为_View()。但是,由于这会将部分逻辑从类声明移动到它连接到路由系统的地方。

您可以在此列表中放置一个或多个装饰器,并且每当创建视图函数时,结果都会自动装饰。

0.8 新版功能.

Changelog
dispatch_request()

子类必须重写此方法以实现实际的视图函数代码。使用URL规则中的所有参数调用此方法。

methods = None

此视图可以处理的方法列表。

provide_automatic_options = None

设置此选项将禁用或强制启用自动选项处理。

class flask.views.MethodView

一种基于类的视图,它将请求方法分派给相应的类方法。例如,如果您实现 get 方法,它将用于处理 GET 请求。::

class CounterAPI(MethodView):
    def get(self):
        return session.get('counter', 0)

    def post(self):
        session['counter'] = session.get('counter', 0) + 1
        return 'OK'

app.add_url_rule('/counter', view_func=CounterAPI.as_view('counter'))
dispatch_request(*args, **kwargs)

子类必须重写此方法以实现实际的视图函数代码。使用URL规则中的所有参数调用此方法。

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

要记住的一个重要细节是flask如何处理尾部斜线。其目的是保持每个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/<id>', methods=['GET', 'POST'])
def region(id):
   pass

以下是参数:meth:`~flask.Flask.route`和:meth:`~flask.Flask.add_url_rule`接受。 唯一的区别是使用route参数,view函数是使用装饰器而不是`view_func`参数定义的。

rule 作为字符串的URL规则
endpoint 已注册的URL规则的终结点。如果没有明确说明,flask本身假定视图函数的名称是端点的名称。
view_func 向提供的端点提供请求时要调用的函数。如果没有提供,可以在以后通过将函数存储在 view_functions 以终结点为键的字典。
defaults 具有此规则默认值的字典。有关默认值的工作方式,请参见上面的示例。
subdomain 指定子域匹配正在使用时的子域规则。如果未指定,则假定为默认子域。
**options 要转发到基础的选项 Rule 对象。Werkzeug的一个变化是处理方法选项。方法是此规则应限于的方法列表( GETPOST 等等)。默认情况下,规则只是监听 GET (隐含地) HEAD )从烧瓶0.6开始, OPTIONS 由标准请求处理隐式添加和处理。必须将它们指定为关键字参数。

查看功能选项

对于内部使用,视图函数可以附加一些属性来定制视图函数通常无法控制的行为。可以选择提供以下属性来重写某些默认值 add_url_rule() 或一般行为:

  • __name__: 函数名默认用作端点。如果显式提供端点,则使用此值。此外,默认情况下,这将以蓝图的名称作为前缀,该名称不能从函数本身自定义。
  • methods: 如果在添加URL规则时未提供方法,则flask将在 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)

0.8 新版功能: 添加了“provide_automatic_options”功能。

Changelog

命令行界面

class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, **extra)

:class:`AppGroup`组的特殊子类,支持从配置的Flask应用程序加载更多命令。 通常,开发人员不必与此类进行交互,但是有一些非常高级的用例,为此创建一个实例是有意义的。

有关此功能有用的原因的信息,请参阅 自定义脚本 .

参数:
  • add_default_commands -- 如果这是真的,那么将添加默认的run和shell命令。
  • add_version_option -- 添加 --version 选择权。
  • create_app -- 传递脚本信息并返回加载的应用程序的可选回调。
  • load_dotenv -- 加载最近的 .env.flaskenv 用于设置环境变量的文件。也会将工作目录更改为包含在被找到的第一个文件的目录。

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

Changelog
get_command(ctx, name)

如果给定上下文和命令名,则返回 Command 对象(如果它存在或返回) None.

list_commands(ctx)

返回子命令名称的列表,其显示顺序为。

main(*args, **kwargs)

这是调用一个脚本的方法,所有的铃声和口哨声都作为命令行应用程序。这将始终在调用后终止应用程序。如果不需要, SystemExit 需要被抓住。

通过直接调用 Command .

3.0 新版功能: 增加了 standalone_mode 用于控制独立模式的标志。

Changelog
参数:
  • args -- 用于解析的参数。如果没有提供, sys.argv[1:] 使用。
  • prog_name -- 应使用的程序名。默认情况下,程序名是通过从 sys.argv[0] .
  • complete_var -- 控制bash完成支持的环境变量。默认值为 "_<prog_name>_COMPLETE" 程序名为大写。
  • standalone_mode -- 默认行为是在独立模式下调用脚本。单击将处理异常并将其转换为错误消息,该函数将永远不会返回,而是关闭解释器。如果设置为 False 它们将传播到调用方,此函数的返回值是 invoke() .
  • extra -- 额外的关键字参数被转发到上下文构造函数。更多信息见 Context
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)

帮助对象处理Flask应用程序。这通常不需要与交互,因为它在调度单击时在内部使用。在烧瓶的未来版本中,这个对象很可能扮演更大的角色。通常它是由 FlaskGroup 但您也可以手动创建它并将其作为单击对象传递。

app_import_path = None

(可选)flask应用程序的导入路径。

create_app = None

(可选)传递脚本信息以创建应用程序实例的函数。

data = None

具有可与此脚本信息关联的任意数据的字典。

load_app()

加载flask应用程序(如果尚未加载)并返回它。多次调用此函数只会返回已加载的应用程序。

flask.cli.load_dotenv(path=None)

按优先顺序加载“dotenv”文件以设置环境变量。

如果已经设置了env var,则不会覆盖它,因此列表中的早期文件优先于后期文件。

将当前工作目录更改为找到的第一个文件的位置,前提是它位于顶层项目目录中,并且是python路径应该从中导入本地包的位置。

如果 python-dotenv 未安装。

参数:path -- 在该位置加载文件,而不是搜索。
返回:如果加载了文件,则为“True”。

1.0 新版功能.

Changelog
flask.cli.with_appcontext(f)

包装一个回调,这样它就可以保证使用脚本的应用程序上下文执行。如果回调直接注册到 app.cli 对象,则默认情况下,除非禁用此函数,否则将用它包装它们。

flask.cli.pass_script_info(f)

标记一个函数,以便 ScriptInfo 作为第一个参数传递给click回调。

flask.cli.run_command = <click.core.Command object>

运行本地开发服务器。

此服务器仅用于开发目的。它不提供生产WSGi服务器的稳定性、安全性或性能。

如果flask_env=development或flask_debug=1,则默认情况下启用重载程序和调试程序。

flask.cli.shell_command = <click.core.Command object>

在给定flask应用程序的上下文中运行交互式python shell。应用程序将根据其配置填充此shell的默认命名空间。

这对于执行管理代码的小片段而不必手动配置应用程序很有用。