API 参考¶
Bottle 以其易于阅读和遵循的源代码而自豪,因此大多数关于 API 或内部工作原理的问题都可以通过检查源代码来快速回答。您的 IDE 应该能提供与本页相同的信息,因为其中大部分内容都是自动从 docstrings 和方法签名生成的。如果您是 Bottle 的新手,可能会发现 User’s Guide 更适合作为起点。
全局函数¶
该模块定义了几个函数、常量和一个异常。
- app()¶
- default_app()¶
返回当前的 Structuring Applications。这实际上是
AppStack
的一个可调用实例。
- uninstall(self, plugin)¶
卸载插件。传递一个实例来删除特定插件,传递一个类型对象来删除所有匹配该类型的插件,传递一个字符串来删除所有具有匹配
name
属性的插件,或传递True
来删除所有插件。返回被删除插件的列表。
- run(app=None, server='wsgiref', host='127.0.0.1', port=8080, interval=1, reloader=False, quiet=False, plugins=None, debug=None, config=None, **kargs)[源代码]¶
启动一个服务器实例。此方法会阻塞直到服务器终止。
- 参数:
app –
load_app()
支持的 WSGI 应用程序或目标字符串。(默认:default_app()
)server – 要使用的服务器适配器。有效名称请参阅
server_names
键,或传递ServerAdapter
子类。(默认: wsgiref)host – 服务器绑定的地址。传递
0.0.0.0
以监听包括外部接口在内的所有接口。(默认: 127.0.0.1)port – 服务器绑定的端口。小于 1024 的值需要 root 权限。(默认: 8080)
reloader – 启动自动重新加载服务器?(默认: False)
interval – 自动重新加载器间隔,单位为秒 (默认: 1)
quiet – 禁止输出到标准输出和标准错误?(默认: False)
options – 传递给服务器适配器的选项。
全局装饰器¶
Bottle 维护一个 Bottle
实例栈 (参见 app()
和 AppStack
),并使用栈顶作为 Structuring Applications,用于一些模块级函数和装饰器。所有这些在 Bottle
类上都有对应的方法。
- route(path, method='GET', callback=None, **options)¶
- get(...)¶
- post(...)¶
- put(...)¶
- delete(...)¶
- patch(...)¶
用于在当前默认应用程序中安装路由的装饰器。详情请参阅
Bottle.route()
。
- error(...)¶
用于在当前默认应用程序中安装错误处理程序的装饰器。详情请参阅
Bottle.error()
。
- hook(self, name)¶
返回一个将回调附加到钩子上的装饰器。详情请参阅
add_hook()
。
请求上下文¶
全局的 request
和 response
实例只在请求处理函数内部有效,表示当前的 HTTP 请求或响应。
- request = <LocalRequest: GET http://127.0.0.1/>¶
LocalRequest
的一个线程安全实例。如果在请求回调函数内部访问,此实例始终指向当前请求(即使在多线程服务器上也是如此)。
- response = Content-Type: text/html; charset=UTF-8 ¶
LocalResponse
的一个线程安全实例。用于更改当前请求的 HTTP 响应。
辅助函数¶
- static_file(filename, root, mimetype=True, download=False, charset='UTF-8', etag=None, headers=None)[源代码]¶
以安全的方式打开文件并返回可发送给客户端的
HTTPResponse
实例。- 参数:
filename – 要发送的文件名或路径,相对于
root
。root – 文件查找的根路径。应为绝对目录路径。
mimetype – 提供 content-type 头部 (默认: 从文件扩展名猜测)
download – 如果为 True,则要求浏览器打开 Save as… 对话框,而不是使用关联程序打开文件。您可以指定一个字符串作为自定义文件名。如果未指定,则使用原始文件名 (默认: False)。
charset –
text/*
mime 类型文件的字符集。(默认: UTF-8)etag – 提供预先计算的 ETag 头部。如果设置为
False
,则禁用 ETag 处理。(默认: 自动生成 ETag 头部)headers – 要添加到响应中的附加头部字典。
虽然检查用户输入始终是个好主意,但此函数提供额外的保护,防止恶意
filename
参数突破root
目录并向攻击者泄露敏感信息。受保护的文件或
root
目录外部的文件将响应403 Access Denied
。缺失的文件将导致404 Not Found
响应。条件请求 (If-Modified-Since
,If-None-Match
) 会尽可能响应304 Not Modified
。HEAD
和Range
请求 (下载管理器用于检查或继续部分下载) 也会自动处理。
异常¶
- exception HTTPResponse[源代码]¶
Response
的子类,可以从请求处理程序中引发或返回,以中断请求处理并覆盖对全局request
对象所做的更改。即使状态码表示错误,这也会绕过错误处理程序。返回或引发HTTPError
以触发错误处理程序。
- exception HTTPError[源代码]¶
HTTPResponse
的子类,用于触发错误处理程序。
Bottle 类¶
- class Bottle[源代码]¶
每个 Bottle 对象代表一个独立的 Web 应用程序,包含路由、回调、插件、资源和配置。实例是可调用的 WSGI 应用程序。
- 参数:
catchall – 如果为 true(默认),处理所有异常。关闭则让调试中间件处理异常。
- config¶
用于应用程序特定配置的
ConfigDict
。
- resources¶
应用程序文件的
ResourceManager
- add_hook(name, func)[源代码]¶
将回调附加到钩子。目前实现了三个钩子
- before_request
在每个请求之前执行一次。请求上下文可用,但尚未进行路由。
- after_request
在每个请求之后执行一次,无论其结果如何。
- app_reset
每当调用
Bottle.reset()
时调用。
- hook(name)[源代码]¶
返回一个将回调附加到钩子上的装饰器。详情请参阅
add_hook()
。
- mount(prefix, app, **options)[源代码]¶
将应用程序 (
Bottle
或普通 WSGI) 挂载到特定的 URL 前缀。示例parent_app.mount('/prefix/', child_app)
- 参数:
prefix – 路径前缀或挂载点。
app –
Bottle
实例或 WSGI 应用程序。
父应用程序的插件不会应用于挂载的子应用程序的路由。如果子应用程序需要插件,请单独安装。
虽然可以在前缀路径中使用路径通配符(仅限
Bottle
子应用程序),但强烈不建议这样做。前缀路径必须以斜杠结尾。如果您想通过 /prefix 以及 /prefix/ 访问子应用程序的根目录,请考虑在父应用程序中添加一个包含 307 重定向的路由。
- uninstall(plugin)[源代码]¶
卸载插件。传递一个实例来删除特定插件,传递一个类型对象来删除所有匹配该类型的插件,传递一个字符串来删除所有具有匹配
name
属性的插件,或传递True
来删除所有插件。返回被删除插件的列表。
- route(path=None, method='GET', callback=None, name=None, apply=None, skip=None, **config)[源代码]¶
将函数绑定到请求 URL 的装饰器。示例
@app.route('/hello/<name>') def hello(name): return 'Hello %s' % name
<name>
部分是通配符。语法详情请参阅Router
。- 参数:
path – 要监听的请求路径或路径列表。如果未指定路径,则自动从函数签名生成。
method – 要监听的 HTTP 方法(GET, POST, PUT, …)或方法列表。(默认: GET)
callback – 避免装饰器语法的可选快捷方式。
route(..., callback=func)
等同于route(...)(func)
name – 此路由的名称。(默认: None)
apply – 装饰器、插件或插件列表。除了已安装的插件外,这些也会应用于路由回调。
skip – 插件、插件类或名称的列表。匹配的插件不会安装到此路由。
True
跳过所有插件。
任何附加关键字参数都将作为路由特定配置存储并传递给插件(参见
Plugin.apply()
)。
Request 对象¶
Request 类封装了 WSGI 环境,并提供了有用的方法来解析和访问表单数据、cookies、文件上传和其他元数据。大多数属性是只读的。
- Request¶
BaseRequest
的别名
- class BaseRequest[源代码]¶
WSGI 环境字典的包装器,添加了许多方便的访问方法和属性。大多数是只读的。
向请求添加新属性实际上是将其添加到 environ 字典中(作为 ‘bottle.request.ext.
’)。这是存储和访问请求特定数据的推荐方法。 - environ¶
包装的 WSGI environ 字典。这是唯一真正的属性。所有其他属性实际上都是只读属性。
- property path¶
PATH_INFO
的值,恰好带有一个前导斜杠(用于修复损坏的客户端并避免“空路径”边缘情况)。
- property method¶
REQUEST_METHOD
值,为大写字符串。
- headers[源代码]¶
一个
WSGIHeaderDict
,提供对 HTTP 请求头部的忽略大小写访问。
- cookies[源代码]¶
解析到
FormsDict
中的 Cookies。签名 cookies 未解码。如果期望签名 cookies,请使用get_cookie()
。
- get_cookie(key, default=None, secret=None, digestmod=<built-in function openssl_sha256>)[源代码]¶
返回 cookie 的内容。要读取签名 Cookie,secret 必须与创建 cookie 时使用的密钥匹配(参见
Response.set_cookie
)。如果出现任何问题(cookie 缺失或签名错误),则返回默认值。
- query[源代码]¶
解析到
FormsDict
中的query_string
。这些值有时被称为“URL 参数”或“GET 参数”,但不要与Router
提供的“URL 通配符”混淆。
- forms[源代码]¶
从 url-encoded 或 multipart/form-data 编码的 POST 或 PUT 请求正文中解析的表单值。结果作为
FormsDict
返回。所有键和值都是字符串。文件上传单独存储在files
中。
- files[源代码]¶
从 multipart/form-data 编码的 POST 或 PUT 请求正文中解析的文件上传。这些值是
FileUpload
的实例。
- json[源代码]¶
如果
Content-Type
头部是application/json
或application/json-rpc
,此属性保存请求正文的解析内容。只有小于MEMFILE_MAX
的请求才会被处理,以避免内存耗尽。无效的 JSON 会引发 400 错误响应。
- property body¶
HTTP 请求正文,作为可查找的文件类对象。取决于
MEMFILE_MAX
,这可能是一个临时文件或io.BytesIO
实例。首次访问此属性会读取并替换wsgi.input
environ 变量。后续访问只是对此文件对象执行 seek(0)。
- property chunked¶
如果使用了 Chunked transfer encoding,则为 True。
- property url¶
完整的请求 URI,包括主机名和方案。如果您的应用程序位于反向代理或负载均衡器之后,并且结果令人困惑,请确保
X-Forwarded-Host
头部已正确设置。
- urlparts[源代码]¶
url
字符串,作为urlparse.SplitResult
元组。该元组包含 (scheme, host, path, query_string 和 fragment),但由于 fragment 对服务器不可见,因此总是为空。
- property fullpath¶
请求路径,包括
script_name
(如果存在)。
- property script_name¶
URL 路径中在调用应用程序之前被更高层(服务器或路由中间件)移除的初始部分。此脚本路径返回时带有前导和尾随斜杠。
- path_shift(shift=1)[源代码]¶
- 将路径段从
path
转移到script_name
,并 反之亦然。
- 参数:
shift – 要转移的路径段数量。可以为负数以改变转移方向。(默认: 1)
- 将路径段从
- property content_type¶
Content-Type
头部,为小写字符串(默认: 空)。
- property is_xhr¶
如果请求由 XMLHttpRequest 触发,则为 True。这只适用于支持 X-Requested-With 头部(大多数流行的库都支持)的 JavaScript 库。
- property auth¶
HTTP 认证数据,为 (user, password) 元组。此实现目前只支持基本认证(非摘要认证)。如果认证发生在更高层(例如前端 web 服务器或中间件),则 password 字段为 None,但 user 字段会从
REMOTE_USER
environ 变量中查找。发生任何错误时,返回 None。
- property remote_route¶
参与此请求的所有 IP 列表,始于客户端 IP,后跟零个或多个代理。这仅在所有代理都支持
`X-Forwarded-For
头部时才有效。请注意,此信息可能被恶意客户端伪造。
- property remote_addr¶
客户端 IP,为字符串。请注意,此信息可能被恶意客户端伪造。
Response 对象¶
Response 类存储 HTTP 状态码以及要发送给客户端的头部和 cookies。与 bottle.request
类似,存在一个线程局部 bottle.response
实例,可用于调整当前响应。此外,您可以实例化 Response 并从请求处理程序中返回。在这种情况下,自定义实例将覆盖全局实例中定义的头部和 cookies。
- Response¶
BaseResponse
的别名
- class BaseResponse[源代码]¶
用于存储响应正文以及头部和 cookies 的类。
此类支持类似字典的忽略大小写项访问头部,但不是字典。最值得注意的是,遍历响应会产生正文的部分内容,而不是头部。
- __init__(body='', status=None, headers=None, **more_headers)[源代码]¶
创建一个新的响应对象。
- 参数:
body – 作为支持类型之一的响应正文。
status – HTTP 状态码(例如 200)或包含原因短语的状态行(例如 ‘200 OK’)。
headers – 字典或名称-值对列表。
其他关键字参数将添加到头部列表中。头部名称中的下划线会被替换为短划线。
- property status_line¶
HTTP 状态行,为字符串(例如
404 Not Found
)。
- property status_code¶
HTTP 状态码,为整数(例如 404)。
- property status¶
一个可写属性,用于更改 HTTP 响应状态。它接受数字代码 (100-999) 或带有自定义原因短语的字符串(例如“404 Brain not found”)。
status_line
和status_code
都会相应更新。返回值始终是状态字符串。
- property headers¶
HeaderDict 的一个实例,它是对响应头部的忽略大小写类似字典的视图。
- property headerlist¶
符合 WSGI 规范的 (header, value) 元组列表。
- content_type¶
‘Content-Type’ 头部当前值。
- content_length¶
‘Content-Length’ 头部当前值。
- expires¶
‘Expires’ 头部当前值。
- property charset¶
返回 content-type 头中指定的字符集(默认:utf8)。
- set_cookie(name, value, secret=None, digestmod=<built-in function openssl_sha256>, **options)[source]¶
创建一个新 cookie 或替换旧 cookie。如果设置了 secret 参数,则创建一个 Signed Cookie(详情见下)。
- 参数:
name – cookie 的名称。
value – cookie 的值。
secret – 签名 cookie 所需的签名密钥。
此外,此方法接受
cookie.Morsel
支持的所有 RFC 2109 属性,包括- 参数:
maxage – 最大生存期(秒)。(默认:None)
expires – 一个 datetime 对象或 UNIX 时间戳。(默认:None)
domain – 允许读取 cookie 的域名。(默认:当前域名)
path – 将 cookie 限制在给定路径下(默认:当前路径)
secure – 将 cookie 限制为 HTTPS 连接(默认:off)。
httponly – 阻止客户端 JavaScript 读取此 cookie(默认:off,需要 Python 2.6 或更高版本)。
samesite – 控制或禁用此 cookie 的第三方使用。可能的值:lax、strict 或 none(默认)。
如果未设置 expires 或 maxage(默认),则 cookie 将在浏览器会话结束时(浏览器窗口关闭时)过期。
签名 cookie 可以存储任何可 pickle 的对象,并经过加密签名以防止篡改。请记住,大多数浏览器中 cookie 的大小限制为 4kb。
警告:Pickle 是一种潜在危险的格式。如果攻击者获取了密钥,他可以伪造在服务器端反序列化时执行代码的 cookie。不推荐使用 pickle,并且在 Bottle 的后续版本中将移除对其的支持。
警告:签名 cookie 未加密(客户端仍然可以看到内容)且未受复制保护(客户端可以恢复旧的 cookie)。主要目的是确保 pickle 和 unpickle 的安全,而不是在客户端存储机密信息。
- class LocalResponse[source]¶
BaseResponse
的线程本地子类,每个线程有一组不同的属性。通常只有一个此类的全局实例(response
)。其属性用于在请求/响应周期的末尾构建 HTTP 响应。- bind(body='', status=None, headers=None, **more_headers)¶
创建一个新的响应对象。
- 参数:
body – 作为支持类型之一的响应正文。
status – HTTP 状态码(例如 200)或包含原因短语的状态行(例如 ‘200 OK’)。
headers – 字典或名称-值对列表。
其他关键字参数将添加到头部列表中。头部名称中的下划线会被替换为短划线。
- property body¶
线程本地属性
数据结构¶
- class ConfigDict[source]¶
一个类似 dict 的配置存储,额外支持命名空间、验证器、元数据和覆盖。
这个类似 dict 的类针对读取访问进行了高度优化。只读方法和项访问应该与原生 dict 一样快。
- load_module(name, squash=True)[source]¶
从 Python 模块加载值。
按名称导入一个 python 模块,并将所有大写的模块级变量添加到此配置 dict 中。
- 参数:
name – 要导入和加载的模块名称。
squash – 如果为 True(默认),则假设嵌套的 dict 代表命名空间并将其展平(参见
load_dict()
)。
- load_config(filename, **options)[source]¶
使用 configparser 从
*.ini
样式配置文件加载值。INI 样式的小节(例如
[section]
)用作该小节内所有键的命名空间。小节名称和键名称都可以包含点作为命名空间分隔符,并转换为小写。特殊小节
[bottle]
和[ROOT]
指的是根命名空间,而[DEFAULT]
小节为所有其他小节定义默认值。- 参数:
filename – 配置文件的路径,或路径列表。
options – 所有关键字参数都传递给底层的
configparser.ConfigParser
构造函数调用。
- load_dict(source, namespace='')[source]¶
从字典结构加载值。可以使用嵌套来表示命名空间。
>>> c = ConfigDict() >>> c.load_dict({'some': {'namespace': {'key': 'value'} } }) {'some.namespace.key': 'value'}
- class MultiDict[source]¶
这个 dict 为每个键存储多个值,但行为与普通 dict 完全相同,因为它只返回任何给定键的最新值。有特殊方法可以访问值的完整列表。
- iterkeys()¶
D.keys() -> 一个提供 D 的键视图的类似集合的对象
- itervalues()¶
D.values() -> 一个提供 D 的值视图的对象
- iteritems()¶
D.items() -> 一个提供 D 的项视图的类似集合的对象
- get(key, default=None, index=-1, type=None)[source]¶
返回键的最新值。
- 参数:
default – 如果键不存在或类型转换失败时返回的默认值。
index – 可用值列表的索引。
type – 如果已定义,则使用此可调用对象将值转换为特定类型。异常会被抑制,结果将返回默认值。
- getone(key, default=None, index=-1, type=None)¶
WTForms 的别名,用于模仿其他多值字典 API (Django)
- getlist(key)¶
返回键的值列表(可能为空)。
- class WSGIHeaderDict[source]¶
这个类似 dict 的类封装了 WSGI environ dict,并提供了对 HTTP_* 字段的便捷访问。头名称不区分大小写,默认情况下会进行首字母大写处理。
- cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH')¶
没有
HTTP_
前缀的键列表。
- class FormsDict[source]¶
这个
MultiDict
子类用于存储请求表单数据。除了普通的类似 dict 的项访问方法外,此容器还支持属性式访问其值。缺失属性默认为空字符串。在 0.14 版本中改变: 所有键和值现在默认解码为 utf8,项和属性访问将返回相同的字符串。
- class FileUpload[source]¶
-
- file¶
打开文件(或类似文件)对象(BytesIO 缓冲区或临时文件)
- name¶
上传表单字段的名称
- raw_filename¶
客户端发送的原始文件名(可能包含不安全字符)
- headers¶
一个包含额外头(例如 content-type)的
HeaderDict
- content_type¶
‘Content-Type’ 头部当前值。
- content_length¶
‘Content-Length’ 头部当前值。
请求路由¶
- class Router[source]¶
Router 是一个有序的路由->目标集合。它用于高效地将 WSGI 请求与多个路由匹配,并返回满足请求的第一个目标。目标可以是任何东西,通常是一个字符串、ID 或可调用对象。一个路由由一个路径规则和一个 HTTP 方法组成。
路径规则可以是静态路径(例如 /contact)或包含通配符的动态路径(例如 /wiki/<page>)。通配符语法和匹配顺序的详细信息在 docs:routing 中描述。
- strict_order¶
如果为 True,则不再首先检查静态路由。
- class Route[source]¶
此类别封装了路由回调以及路由特定的元数据和配置,并按需应用插件。它还负责将 URL 路径规则转换为 Router 可用的正则表达式。
- app¶
安装此路由的应用程序。
- rule¶
路径规则字符串(例如
/wiki/<page>
)。
- method¶
HTTP 方法的字符串表示(例如
GET
)。
- callback¶
未应用任何插件的原始回调。对于内省很有用。
- name¶
路由的名称(如果指定)或
None
。
- plugins¶
一个路由特定插件列表(参见
Bottle.route()
)。
- skiplist¶
不应用于此路由的插件列表(参见
Bottle.route()
)。
- config¶
传递给
Bottle.route()
装饰器的额外关键字参数存储在此字典中。用于路由特定的插件配置和元数据。
模板化¶
bottle
支持的所有模板引擎都实现了 BaseTemplate
API。这样就可以在不改变应用程序代码的情况下切换和混合模板引擎。
- class BaseTemplate[source]¶
模板适配器的基类和最小 API
- __init__(source=None, name=None, lookup=None, encoding='utf8', **settings)[source]¶
创建一个新模板。如果 source 参数(str 或 buffer)缺失,则使用 name 参数猜测模板文件名。子类可以假定 self.source 和/或 self.filename 已设置。两者都是字符串。lookup、encoding 和 settings 参数作为实例变量存储。lookup 参数存储包含目录路径的列表。encoding 参数应用于解码字节字符串或文件。settings 参数包含一个用于引擎特定设置的 dict。
- view(tpl_name, **defaults)[source]¶
装饰器:为处理函数渲染模板。处理函数可以这样控制其行为
返回一个模板变量字典来填充模板
返回字典以外的内容时,view 装饰器将不处理模板,而是按原样返回处理函数的结果。这包括返回 HTTPResponse(dict) 以获取(例如)使用 autojson 或其他 castfilters 的 JSON。
- template(*args, **kwargs)[source]¶
将渲染后的模板作为字符串迭代器获取。你可以将名称、文件名或模板字符串作为第一个参数。模板渲染参数可以通过字典或直接作为关键字参数传递。
- TEMPLATE_PATH = ['./', './views/']¶
内置可变序列。
如果没有给出参数,构造函数会创建一个新的空列表。如果指定了参数,则参数必须是可迭代对象。
模板的全局搜索路径。
你可以为你喜欢的模板引擎编写自己的适配器,或使用预定义的适配器之一。目前有四种完全支持的模板引擎
类 |
URL |
装饰器 |
渲染函数 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
要将 MakoTemplate
用作默认模板引擎,只需导入其专用的装饰器和渲染函数即可
from bottle import mako_view as view, mako_template as template
HTTP 工具¶
- path_shift(script_name, path_info, shift=1)[source]¶
将路径片段从 PATH_INFO 转移到 SCRIPT_NAME,反之亦然。
- 返回:
修改后的路径。
- 参数:
script_name – SCRIPT_NAME 路径。
path_info – PATH_INFO 路径。(注意:原文此处有误,应为 path_info)
shift – 要转移的路径片段数量。可以是负数以改变转移方向。(默认:1)
- HTTP_CODES¶
一个将 HTTP 状态码(例如 404)映射到短语(例如 ‘Not Found’)的字典。
杂项工具¶
- yieldroutes(func)[source]¶
为与 func 参数的签名 (name, args) 匹配的路由返回一个生成器。如果函数接受可选关键字参数,这可能会生成多个路由。输出通过示例可以最好地描述
a() -> '/a' b(x, y) -> '/b/<x>/<y>' c(x, y=5) -> '/c/<x>' and '/c/<x>/<y>' d(x=5, y=6) -> '/d' and '/d/<x>' and '/d/<x>/<y>'