API参考¶
这份文档几乎是全自动生成的。如果你刚接触bottle,也许 教程 会更有帮助。
模块目录¶
该模块定义了几个函数、常量和一个异常。
- 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 -- 支持的wsgi应用程序或目标字符串
load_app()
. (默认:default_app()
)server -- 要使用的服务器适配器。见
server_names
有效名称的键或传递ServerAdapter
子类。(默认: wsgiref )host -- 要绑定到的服务器地址。通过
0.0.0.0
监听包括外部接口在内的所有接口。(默认值:127.0.0.1)port -- 要绑定到的服务器端口。低于1024的值需要根权限。(默认值:8080)
reloader -- 启动自动重新加载服务器?(默认值:假)
interval -- 自动重新加载间隔(秒)(默认值:1)
quiet -- 禁止输出到stdout和stderr?(默认值:假)
options -- 传递给服务器适配器的选项。
- load(target, **namespace)[源代码]¶
导入模块或从模块中获取对象。
package.module
收益率 module 作为模块对象。pack.mod:name
返回模块变量 name 从 pack.mod .pack.mod:func()
电话 pack.mod.func() 并返回结果。
最后一个窗体不仅接受函数调用,还接受任何类型的表达式。传递给此函数的关键字参数可用作局部变量。例子:
import_string('re:compile(x)', x='[a-z]')
- request = <LocalRequest: GET http://127.0.0.1/>¶
的线程安全实例
LocalRequest
. 如果从请求回调中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。
- response = Content-Type: text/html; charset=UTF-8 ¶
的线程安全实例
LocalResponse
. 它用于更改 现在的 请求。
- HTTP_CODES = {HTTPStatus.CONTINUE: 'Continue', HTTPStatus.SWITCHING_PROTOCOLS: 'Switching Protocols', HTTPStatus.PROCESSING: 'Processing', HTTPStatus.OK: 'OK', HTTPStatus.CREATED: 'Created', HTTPStatus.ACCEPTED: 'Accepted', HTTPStatus.NON_AUTHORITATIVE_INFORMATION: 'Non-Authoritative Information', HTTPStatus.NO_CONTENT: 'No Content', HTTPStatus.RESET_CONTENT: 'Reset Content', HTTPStatus.PARTIAL_CONTENT: 'Partial Content', HTTPStatus.MULTI_STATUS: 'Multi-Status', HTTPStatus.ALREADY_REPORTED: 'Already Reported', HTTPStatus.IM_USED: 'IM Used', HTTPStatus.MULTIPLE_CHOICES: 'Multiple Choices', HTTPStatus.MOVED_PERMANENTLY: 'Moved Permanently', HTTPStatus.FOUND: 'Found', HTTPStatus.SEE_OTHER: 'See Other', HTTPStatus.NOT_MODIFIED: 'Not Modified', HTTPStatus.USE_PROXY: 'Use Proxy', HTTPStatus.TEMPORARY_REDIRECT: 'Temporary Redirect', HTTPStatus.PERMANENT_REDIRECT: 'Permanent Redirect', HTTPStatus.BAD_REQUEST: 'Bad Request', HTTPStatus.UNAUTHORIZED: 'Unauthorized', HTTPStatus.PAYMENT_REQUIRED: 'Payment Required', HTTPStatus.FORBIDDEN: 'Forbidden', HTTPStatus.NOT_FOUND: 'Not Found', HTTPStatus.METHOD_NOT_ALLOWED: 'Method Not Allowed', HTTPStatus.NOT_ACCEPTABLE: 'Not Acceptable', HTTPStatus.PROXY_AUTHENTICATION_REQUIRED: 'Proxy Authentication Required', HTTPStatus.REQUEST_TIMEOUT: 'Request Timeout', HTTPStatus.CONFLICT: 'Conflict', HTTPStatus.GONE: 'Gone', HTTPStatus.LENGTH_REQUIRED: 'Length Required', HTTPStatus.PRECONDITION_FAILED: 'Precondition Failed', HTTPStatus.REQUEST_ENTITY_TOO_LARGE: 'Request Entity Too Large', HTTPStatus.REQUEST_URI_TOO_LONG: 'Request-URI Too Long', HTTPStatus.UNSUPPORTED_MEDIA_TYPE: 'Unsupported Media Type', HTTPStatus.REQUESTED_RANGE_NOT_SATISFIABLE: 'Requested Range Not Satisfiable', HTTPStatus.EXPECTATION_FAILED: 'Expectation Failed', 418: "I'm a teapot", HTTPStatus.MISDIRECTED_REQUEST: 'Misdirected Request', HTTPStatus.UNPROCESSABLE_ENTITY: 'Unprocessable Entity', HTTPStatus.LOCKED: 'Locked', HTTPStatus.FAILED_DEPENDENCY: 'Failed Dependency', HTTPStatus.UPGRADE_REQUIRED: 'Upgrade Required', HTTPStatus.PRECONDITION_REQUIRED: 'Precondition Required', HTTPStatus.TOO_MANY_REQUESTS: 'Too Many Requests', HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons', HTTPStatus.INTERNAL_SERVER_ERROR: 'Internal Server Error', HTTPStatus.NOT_IMPLEMENTED: 'Not Implemented', HTTPStatus.BAD_GATEWAY: 'Bad Gateway', HTTPStatus.SERVICE_UNAVAILABLE: 'Service Unavailable', HTTPStatus.GATEWAY_TIMEOUT: 'Gateway Timeout', HTTPStatus.HTTP_VERSION_NOT_SUPPORTED: 'HTTP Version Not Supported', HTTPStatus.VARIANT_ALSO_NEGOTIATES: 'Variant Also Negotiates', HTTPStatus.INSUFFICIENT_STORAGE: 'Insufficient Storage', HTTPStatus.LOOP_DETECTED: 'Loop Detected', HTTPStatus.NOT_EXTENDED: 'Not Extended', HTTPStatus.NETWORK_AUTHENTICATION_REQUIRED: 'Network Authentication Required'}¶
将HTTP状态代码(例如404)映射到短语(例如“未找到”)的dict
路由¶
Bottle 保持一堆 Bottle
实例(见) app()
和 AppStack
)并使用堆栈顶部作为 默认应用程序 对于一些模块级函数和装饰器。
- route(path, method='GET', callback=None, **options)¶
- get(...)¶
- post(...)¶
- put(...)¶
- delete(...)¶
- patch(...)¶
decorator安装到当前默认应用程序的路由。见
Bottle.route()
有关详细信息。
- error(...)¶
decorator将错误处理程序安装到当前默认应用程序。见
Bottle.error()
有关详细信息。
wsgi和http实用程序¶
数据结构¶
- class MultiDict(*a, **k)[源代码]¶
此dict为每个键存储多个值,但其行为与普通dict完全相同,因为它只返回任何给定键的最新值。有一些特殊的方法可以访问完整的值列表。
- get(key, default=None, index=- 1, type=None)[源代码]¶
返回键的最新值。
- 参数
default -- 如果键不存在或类型转换失败,则返回的默认值。
index -- 可用值列表的索引。
type -- 如果已定义,则此可调用项用于将值强制转换为特定类型。异常被抑制并导致返回默认值。
- getone(key, default=None, index=- 1, type=None)¶
用于模拟其他多dict API(django)的wtforms别名
- getlist(key)¶
返回键的值列表(可能为空)。
- class FormsDict(*a, **k)[源代码]¶
这个
MultiDict
子类用于存储请求表单数据。除了常规的类似dict的项访问方法(将未修改的数据作为本机字符串返回)之外,此容器还支持对其值的类似属性的访问。自动对属性进行反编码或重新编码以匹配input_encoding
(默认:“utf8”)。缺少默认为空字符串的属性。- input_encoding = 'utf8'¶
用于属性值的编码。
- recode_unicode = True¶
如果为真(默认),则首先使用Unicode字符串编码 latin1 然后解码匹配
input_encoding
.
- decode(encoding=None)[源代码]¶
返回一个副本,其中所有键和值都已取消编码或重新编码以匹配
input_encoding
. 某些库(例如wtforms)需要Unicode字典。
- class WSGIHeaderDict(environ)[源代码]¶
这个类似dict的类包装了一个wsgi environ dict并提供了对http_*字段的方便访问。键和值是本机字符串(2.x字节或3.x Unicode),键不区分大小写。如果wsgi环境包含非本机字符串值,则使用无损的“latin1”字符集对这些值进行解码或编码。
即使相关政治公众人物发生变化,API也将保持稳定。目前支持PEP 333、444和3333。(PEP 444是唯一使用非本机字符串的字符串。)
- cgikeys = ('CONTENT_TYPE', 'CONTENT_LENGTH')¶
没有键的键列表
HTTP_
前缀。
- class ResourceManager(base='./', opener=<built-in function open>, cachemode='all')[源代码]¶
此类管理搜索路径列表,并帮助查找和打开应用程序绑定的资源(文件)。
- 参数
base -- 的默认值
add_path()
电话。opener -- 可调用用于打开资源。
cachemode -- 控制缓存的查找。“all”、“found”或“none”中的一个。
- path¶
搜索路径列表。见
add_path()
有关详细信息。
- cache¶
已解析路径的缓存。
res.cache.clear()
清除缓存。
- add_path(path, base=None, index=None, create=False)[源代码]¶
将新路径添加到搜索路径列表中。如果路径不存在,则返回false。
- 参数
path -- 新的搜索路径。相对路径被转换成绝对和规范化的形式。如果路径看起来像一个文件(不以 / )将删除文件名。
base -- 用于绝对化相对搜索路径的路径。默认为
base
默认为os.getcwd()
.index -- 在搜索路径列表中的位置。默认为最后一个索引(附加到列表)。
这个 base 参数使参考随python模块或包一起安装的文件变得容易:
res.add_path('./resources/', __file__)
- class FileUpload(fileobj, name, filename, headers=None)[源代码]¶
- file¶
打开文件(-like)对象(字节缓冲区或临时文件)
- name¶
上载表单字段的名称
- raw_filename¶
客户端发送的原始文件名(可能包含不安全字符)
- headers¶
A
HeaderDict
带有附加标题(例如内容类型)
- content_type¶
“content-type”头的当前值。
- content_length¶
“content-length”头的当前值。
例外情况¶
这个 Bottle
等级¶
- class Bottle(**kwargs)[源代码]¶
每个bottle对象代表一个单独的、不同的Web应用程序,由路由、回调、插件、资源和配置组成。实例是可调用的WSGi应用程序。
- 参数
catchall -- 如果为真(默认),则处理所有异常。关闭以允许调试中间件处理异常。
- config¶
A
ConfigDict
应用程序特定配置。
- resources¶
A
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 -- 路径前缀 mount-point .
app -- 一个实例
Bottle
或者一个wsgi应用程序。
父应用程序的插件不应用于已装入的子应用程序的路由。如果您需要子应用程序中的插件,请分别安装它们。
虽然可以在前缀路径中使用路径通配符 (
Bottle
只有孩子),这是非常令人沮丧的。前缀路径必须以斜线结尾。如果要通过访问子应用程序的根目录, /prefix 除了 /prefix/ ,考虑添加一个307重定向到父应用程序的路由。
- uninstall(plugin)[源代码]¶
卸载插件。传递一个实例以删除特定的插件,传递一个类型对象以删除与该类型匹配的所有插件,传递一个字符串以删除具有匹配项的所有插件
name
属性或True
删除所有插件。返回已删除插件的列表。
- match(environ)[源代码]¶
搜索匹配的路由并返回 (
Route
,urlargs)元组。第二个值是一个字典,其中包含从URL提取的参数。提高HTTPError
(404/405)不匹配。
- 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 -- 避免使用decorator语法的可选快捷方式。
route(..., callback=func)
等于route(...)(func)
name -- 此路由的名称。(默认:无)
apply -- 装饰或插件或插件列表。除了已安装的插件外,它们还应用于路由回调。
skip -- 插件、插件类或名称的列表。匹配的插件没有安装到此路由。
True
跳过所有。
任何其他关键字参数都存储为路由特定的配置并传递给插件(请参见
Plugin.apply()
)
- class Route(app, rule, method, callback, name=None, plugins=None, skiplist=None, **config)[源代码]¶
这个类包装了一个路由回调以及路由特定的元数据和配置,并按需应用插件。它还负责将URL路径规则转换为路由器可用的正则表达式。
- app¶
此路由安装到的应用程序。
- rule¶
路径规则字符串(例如
/wiki/<page>
)
- method¶
HTTP方法的字符串(例如:
GET
)
- callback¶
未应用任何插件的原始回调函数,用于内省。
- name¶
route的名字,如未指定则为
None
- plugins¶
路由特定插件的列表(请参见
Bottle.route()
)
- skiplist¶
不适用于此路由的插件列表(请参见
Bottle.route()
)
- config¶
传递给的其他关键字参数
Bottle.route()
装饰器存储在此字典中。用于路由特定的插件配置和元数据。
这个 Request
对象¶
这个 Request
类包装了一个WSGi环境,并提供了解析和访问表单数据、cookie、文件上载和其他元数据的有用方法。大多数属性是只读的。
- class BaseRequest(environ=None)[源代码]¶
为wsgi环境字典添加了许多方便的访问方法和属性的包装器。其中大多数是只读的。
向请求添加新属性实际上会将它们添加到环境字典中(如“bottle.request.ext.<name>”。这是存储和访问请求特定数据的推荐方法。
- environ¶
包装好的wsgi环境字典。这是唯一真实的属性。所有其他属性实际上都是只读属性。
- property path¶
价值
PATH_INFO
只有一个前缀斜杠(用于修复损坏的客户机并避免出现“空路径”的边缘情况)。
- property method¶
这个
REQUEST_METHOD
值为大写字符串。
- headers[源代码]¶
A
WSGIHeaderDict
它提供对HTTP请求头不区分大小写的访问。
- cookies[源代码]¶
Cookies 被解析成
FormsDict
. 未解码签名的cookie。使用get_cookie()
如果你想要签名的饼干。
- get_cookie(key, default=None, secret=None, digestmod=<built-in function openssl_sha256>)[源代码]¶
返回cookie的内容。读一篇 Signed Cookie , the secret 必须与用于创建cookie的匹配(请参见
BaseResponse.set_cookie()
)如果出现任何错误(缺少cookie或签名错误),请返回默认值。
- query[源代码]¶
这个
query_string
解析成FormsDict
. 这些值有时称为“url参数”或“get参数”,但不要与“url通配符”混淆,因为它们由Router
.
- 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
环境变量。后续访问只需执行 seek(0) 在文件对象上。
- property chunked¶
如果分块传输编码为,则为true。
- property url¶
完整的请求URI,包括主机名和方案。如果您的应用程序位于反向代理或负载均衡器之后,并且您得到令人困惑的结果,请确保
X-Forwarded-Host
收割台设置正确。
- urlparts[源代码]¶
这个
url
字符串作为urlparse.SplitResult
元组。tuple包含(scheme、host、path、query_string和fragment),但fragment始终为空,因为它对服务器不可见。
- property fullpath¶
请求路径包括
script_name
(如果有的话)。
- property script_name¶
URL的初始部分 path 在调用应用程序之前被更高级别(服务器或路由中间件)删除。返回的脚本路径带有前导和尾随斜杠。
- path_shift(shift=1)[源代码]¶
- 移动路径段
path
到script_name
和 反之亦然。
- 参数
shift -- 要移动的路径段数。可以为负来改变换档方向。(默认值:1)
- 移动路径段
- property content_type¶
内容类型头作为小写字符串(默认值:空)。
- property is_xhr¶
如果请求由xmlhttpRequest触发,则为true。这只适用于支持 X-Requested-With 标题(大多数流行的库都有)。
- property auth¶
HTTP身份验证数据作为(用户、密码)元组。此实现当前仅支持基本(而不是摘要式)身份验证。如果身份验证发生在更高级别(例如在前端Web服务器或中间件中),则密码字段为无,但用户字段是从
REMOTE_USER
环境变量。如果出现任何错误,将不返回任何错误。
- property remote_route¶
此请求中涉及的所有IP的列表,从客户端IP开始,后跟零个或多个代理。只有当所有代理都支持
`X-Forwarded-For
标题。请注意,此信息可能是恶意客户端伪造的。
- property remote_addr¶
作为字符串的客户端IP。请注意,此信息可能是恶意客户端伪造的。
模块级别 bottle.request
是代理对象(实现于 LocalRequest
)总是指 current 请求,或者换句话说,当前线程中请求处理程序当前处理的请求。这个 thread locality 确保您可以在多线程环境中安全地使用全局实例。
- class LocalRequest(environ=None)[源代码]¶
线程的局部子类
BaseRequest
每个线程有一组不同的属性。此类通常只有一个全局实例 (request
)如果在请求/响应周期中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。- bind(environ=None)¶
包装wsgi环境字典。
- request = <LocalRequest: GET http://127.0.0.1/>¶
的线程安全实例
LocalRequest
. 如果从请求回调中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。
Response
对象¶
这个 Response
类存储要发送到客户端的HTTP状态代码以及头和cookie。类似 bottle.request
本地有一个线程 bottle.response
可用于调整 current 反应。此外,您可以实例化 Response
并从您的请求处理程序返回它。在这种情况下,自定义实例会否决全局实例中定义的头和cookie。
- class BaseResponse(body='', status=None, headers=None, **more_headers)[源代码]¶
响应主体以及头和cookie的存储类。
这个类支持类似dict的不区分大小写的项对头的访问,但不是dict。最明显的是,在响应上迭代会产生部分主体而不是头。
- 参数
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
,响应头上不区分大小写的类似dict的视图。
- property headerlist¶
wsgi符合(header,value)元组列表。
- content_type¶
“content-type”头的当前值。
- content_length¶
“content-length”头的当前值。
- expires¶
“expires”头的当前值。
- property charset¶
返回在内容类型头中指定的字符集(默认值:utf8)。
- set_cookie(name, value, secret=None, digestmod=<built-in function openssl_sha256>, **options)[源代码]¶
创建新的cookie或替换旧的cookie。如果 secret 参数已设置,请创建 Signed Cookie (如下所述)。
- 参数
name -- cookie的名称。
value -- cookie的值。
secret -- 签名的cookie需要签名密钥。
此外,此方法接受由
cookie.Morsel
,包括:- 参数
maxage -- 以秒为单位的最大年龄。(默认:无)
expires -- 日期时间对象或Unix时间戳。(默认:无)
domain -- 允许读取cookie的域。(默认值:当前域)
path -- 将cookie限制为给定路径(默认:当前路径)
secure -- 将cookie限制为https连接(默认:关闭)。
httponly -- 阻止客户端javascript读取此cookie(默认:关闭,需要python 2.6或更高版本)。
samesite -- 控制或禁用此cookie的第三方使用。可能值: lax , strict 或 none (默认)。
如果既不 expires 也不 maxage 设置为(默认),cookie将在浏览器会话结束时过期(浏览器窗口关闭后)。
签名的cookie可以存储任何可酸洗的对象,并通过密码签名来防止操作。请记住,在大多数浏览器中,cookie限制在4KB。
警告:Pickle是一种潜在的危险格式。如果攻击者获得了对密钥的访问权,他就可以伪造cookie,在服务器端执行代码。不鼓励使用pickle,在以后版本的瓶子中将删除对它的支持。
警告:签名的cookie未加密(客户端仍然可以看到内容)且未受复制保护(客户端可以还原旧cookie)。其主要目的是为了节省酸洗和拆封,而不是在客户方存储机密信息。
- class LocalResponse(body='', status=None, headers=None, **more_headers)[源代码]¶
线程的局部子类
BaseResponse
每个线程有一组不同的属性。此类通常只有一个全局实例 (response
)它的属性用于在请求/响应周期结束时构建HTTP响应。- bind(body='', status=None, headers=None, **more_headers)¶
初始化自身。请参阅帮助(键入(self))以获得准确的签名。
- property body¶
线程本地属性
以下两个类可以作为异常引发。最明显的区别是 Bottle 调用错误处理程序 HTTPError
,但不是为了 HTTPResponse
或其他响应类型。
模板¶
支持的所有模板引擎 bottle
实施 BaseTemplate
应用程序编程接口。这样就可以在不更改应用程序代码的情况下切换和混合模板引擎。
- class BaseTemplate(source=None, name=None, lookup=None, encoding='utf8', **settings)[源代码]¶
模板适配器的基类和最小API
- view(tpl_name, **defaults)[源代码]¶
decorator:为处理程序呈现模板。处理程序可以这样控制其行为:
返回模板变量的dict以填充模板
返回dict之外的内容,视图修饰器将不处理模板,而是按原样返回处理程序结果。这包括返回一个httpresponse(dict)以获取,例如,带有autojson或其他castfilters的json。
您可以为您喜爱的模板引擎编写自己的适配器,或者使用一个预定义的适配器。目前有四个完全支持的模板引擎:
等级 |
URL |
装饰者 |
渲染函数 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
使用 MakoTemplate
作为默认模板引擎,只需导入其专用的decorator和render函数:
from bottle import mako_view as view, mako_template as template