API参考

这份文档几乎是全自动生成的。如果你刚接触bottle,也许 教程 会更有帮助。

模块内容

该模块定义了几个函数、常量和一个异常。

debug(mode=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 -- 支持的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 返回模块变量 namepack.mod .
  • pack.mod:func() 电话 pack.mod.func() 并返回结果。

最后一个窗体不仅接受函数调用,还接受任何类型的表达式。传递给此函数的关键字参数可用作局部变量。例子: import_string('re:compile(x)', x='[a-z]')

load_app(target)[源代码]

从模块加载 Bottle 应用程序,并确保导入不会影响当前默认应用程序,而是返回单独的应用程序对象。见 load() 对于目标参数。

request = <LocalRequest: GET http://127.0.0.1/>

的线程安全实例 LocalRequest . 如果从请求回调中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。

response = Content-Type: text/html; charset=UTF-8

的线程安全实例 LocalResponse . 它用于更改 现在的 请求。

HTTP_CODES = {<HTTPStatus.CONTINUE: 100>: 'Continue', <HTTPStatus.SWITCHING_PROTOCOLS: 101>: 'Switching Protocols', <HTTPStatus.PROCESSING: 102>: 'Processing', <HTTPStatus.OK: 200>: 'OK', <HTTPStatus.CREATED: 201>: 'Created', <HTTPStatus.ACCEPTED: 202>: 'Accepted', <HTTPStatus.NON_AUTHORITATIVE_INFORMATION: 203>: 'Non-Authoritative Information', <HTTPStatus.NO_CONTENT: 204>: 'No Content', <HTTPStatus.RESET_CONTENT: 205>: 'Reset Content', <HTTPStatus.PARTIAL_CONTENT: 206>: 'Partial Content', <HTTPStatus.MULTI_STATUS: 207>: 'Multi-Status', <HTTPStatus.ALREADY_REPORTED: 208>: 'Already Reported', <HTTPStatus.IM_USED: 226>: 'IM Used', <HTTPStatus.MULTIPLE_CHOICES: 300>: 'Multiple Choices', <HTTPStatus.MOVED_PERMANENTLY: 301>: 'Moved Permanently', <HTTPStatus.FOUND: 302>: 'Found', <HTTPStatus.SEE_OTHER: 303>: 'See Other', <HTTPStatus.NOT_MODIFIED: 304>: 'Not Modified', <HTTPStatus.USE_PROXY: 305>: 'Use Proxy', <HTTPStatus.TEMPORARY_REDIRECT: 307>: 'Temporary Redirect', <HTTPStatus.PERMANENT_REDIRECT: 308>: 'Permanent Redirect', <HTTPStatus.BAD_REQUEST: 400>: 'Bad Request', <HTTPStatus.UNAUTHORIZED: 401>: 'Unauthorized', <HTTPStatus.PAYMENT_REQUIRED: 402>: 'Payment Required', <HTTPStatus.FORBIDDEN: 403>: 'Forbidden', <HTTPStatus.NOT_FOUND: 404>: 'Not Found', <HTTPStatus.METHOD_NOT_ALLOWED: 405>: 'Method Not Allowed', <HTTPStatus.NOT_ACCEPTABLE: 406>: 'Not Acceptable', <HTTPStatus.PROXY_AUTHENTICATION_REQUIRED: 407>: 'Proxy Authentication Required', <HTTPStatus.REQUEST_TIMEOUT: 408>: 'Request Timeout', <HTTPStatus.CONFLICT: 409>: 'Conflict', <HTTPStatus.GONE: 410>: 'Gone', <HTTPStatus.LENGTH_REQUIRED: 411>: 'Length Required', <HTTPStatus.PRECONDITION_FAILED: 412>: 'Precondition Failed', <HTTPStatus.REQUEST_ENTITY_TOO_LARGE: 413>: 'Request Entity Too Large', <HTTPStatus.REQUEST_URI_TOO_LONG: 414>: 'Request-URI Too Long', <HTTPStatus.UNSUPPORTED_MEDIA_TYPE: 415>: 'Unsupported Media Type', <HTTPStatus.REQUESTED_RANGE_NOT_SATISFIABLE: 416>: 'Requested Range Not Satisfiable', <HTTPStatus.EXPECTATION_FAILED: 417>: 'Expectation Failed', 418: "I'm a teapot", <HTTPStatus.UNPROCESSABLE_ENTITY: 422>: 'Unprocessable Entity', <HTTPStatus.LOCKED: 423>: 'Locked', <HTTPStatus.FAILED_DEPENDENCY: 424>: 'Failed Dependency', <HTTPStatus.UPGRADE_REQUIRED: 426>: 'Upgrade Required', <HTTPStatus.PRECONDITION_REQUIRED: 428>: 'Precondition Required', <HTTPStatus.TOO_MANY_REQUESTS: 429>: 'Too Many Requests', <HTTPStatus.REQUEST_HEADER_FIELDS_TOO_LARGE: 431>: 'Request Header Fields Too Large', 451: 'Unavailable For Legal Reasons', <HTTPStatus.INTERNAL_SERVER_ERROR: 500>: 'Internal Server Error', <HTTPStatus.NOT_IMPLEMENTED: 501>: 'Not Implemented', <HTTPStatus.BAD_GATEWAY: 502>: 'Bad Gateway', <HTTPStatus.SERVICE_UNAVAILABLE: 503>: 'Service Unavailable', <HTTPStatus.GATEWAY_TIMEOUT: 504>: 'Gateway Timeout', <HTTPStatus.HTTP_VERSION_NOT_SUPPORTED: 505>: 'HTTP Version Not Supported', <HTTPStatus.VARIANT_ALSO_NEGOTIATES: 506>: 'Variant Also Negotiates', <HTTPStatus.INSUFFICIENT_STORAGE: 507>: 'Insufficient Storage', <HTTPStatus.LOOP_DETECTED: 508>: 'Loop Detected', <HTTPStatus.NOT_EXTENDED: 510>: 'Not Extended', <HTTPStatus.NETWORK_AUTHENTICATION_REQUIRED: 511>: 'Network Authentication Required'}

将HTTP状态代码(例如404)映射到短语(例如“未找到”)的dict

app()
default_app()

返回电流 默认应用 . 实际上,这些是 AppStack 并实现类似于堆栈的API。

路由

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实用程序

parse_date(ims)[源代码]

分析rfc1123、rfc850和aschtime时间戳并返回UTC epoch。

parse_auth(header)[源代码]

分析rfc2617 HTTP身份验证头字符串(basic)并返回(user,pass)tuple或none

cookie_encode(data, key, digestmod=None)[源代码]

对一个可酸洗的对象进行编码和签名。返回(字节)字符串

cookie_decode(data, key, digestmod=None)[源代码]

验证并解码编码字符串。返回对象或不返回。

cookie_is_encoded(data)[源代码]

如果参数看起来像编码的cookie,则返回true。

yieldroutes(func)[源代码]

返回与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>'
path_shift(script_name, path_info, shift=1)[源代码]

将路径片段从路径信息转移到脚本名称,反之亦然。

返回:

修改过的路径。

参数:
  • script_name -- 脚本名称路径。
  • script_name -- 路径信息路径。
  • shift -- 要移动的路径片段数。可以为负来改变换档方向。(默认值:1)

数据结构

class MultiDict(*a, **k)[源代码]

此dict为每个键存储多个值,但其行为与普通dict完全相同,因为它只返回任何给定键的最新值。有一些特殊的方法可以访问完整的值列表。

keys() → a set-like object providing a view on D's keys[源代码]
values() → an object providing a view on D's values[源代码]
items() → a set-like object providing a view on D's items[源代码]
iterkeys()[源代码]

d.keys()->提供d's keys视图的集合类对象

itervalues()[源代码]

d.values()->提供d值视图的对象

iteritems()[源代码]

d.items()->提供d项视图的集合类对象

get(key, default=None, index=-1, type=None)[源代码]

返回键的最新值。

参数:
  • default -- 如果键不存在或类型转换失败,则返回的默认值。
  • index -- 可用值列表的索引。
  • type -- 如果已定义,则此可调用项用于将值强制转换为特定类型。异常被抑制并导致返回默认值。
append(key, value)[源代码]

将新值添加到此键的值列表中。

replace(key, value)[源代码]

将值列表替换为单个值。

getall(key)[源代码]

返回键的值列表(可能为空)。

getone(key, default=None, index=-1, type=None)

用于模拟其他多dict API(django)的wtforms别名

getlist(key)

返回键的值列表(可能为空)。

class HeaderDict(*a, **ka)[源代码]

不区分大小写的 MultiDict 默认情况下,将替换旧值而不是追加它。

append(key, value)[源代码]

将新值添加到此键的值列表中。

replace(key, value)[源代码]

将值列表替换为单个值。

getall(key)[源代码]

返回键的值列表(可能为空)。

get(key, default=None, index=-1)[源代码]

返回键的最新值。

参数:
  • default -- 如果键不存在或类型转换失败,则返回的默认值。
  • index -- 可用值列表的索引。
  • type -- 如果已定义,则此可调用项用于将值强制转换为特定类型。异常被抑制并导致返回默认值。
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字典。

getunicode(name, default=None, encoding=None)[源代码]

以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_ 前缀。

raw(key, default=None)[源代码]

按原样返回头值(可以是字节或Unicode)。

keys() → a set-like object providing a view on D's keys[源代码]
class AppStack[源代码]

类似堆栈的列表。调用它会返回栈头。

pop()

返回当前默认应用程序并将其从堆栈中移除。

push(value=None)[源代码]

添加新的 Bottle 实例到堆栈

new_app(value=None)

添加新的 Bottle 实例到堆栈

class ResourceManager(base='./', opener=<built-in function open>, cachemode='all')[源代码]

此类管理搜索路径列表,并帮助查找和打开应用程序绑定的资源(文件)。

参数:
  • base -- 的默认值 add_path() 电话。
  • opener -- 可调用用于打开资源。
  • cachemode -- 控制缓存的查找。“all”、“found”或“none”中的一个。
path = None

搜索路径列表。见 add_path() 有关详细信息。

cache = None

已解析路径的缓存。 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__)
lookup(name)[源代码]

搜索资源并返回绝对文件路径,或 None .

这个 path 按顺序搜索列表。第一场比赛重新开始。遵循符号链接。结果被缓存以加速将来的查找。

open(name, mode='r', *args, **kwargs)[源代码]

查找资源并返回文件对象,或引发ioerror。

class FileUpload(fileobj, name, filename, headers=None)[源代码]
file = None

打开文件(-like)对象(字节缓冲区或临时文件)

name = None

上载表单字段的名称

raw_filename = None

客户端发送的原始文件名(可能包含不安全字符)

headers = None

A HeaderDict 带有附加标题(例如内容类型)

content_type

“content-type”头的当前值。

content_length

“content-length”头的当前值。

get_header(name, default=None)[源代码]

返回mulritart部分中头的值。

filename[源代码]

客户机文件系统上的文件名,但经过规范化以确保文件系统的兼容性。空文件名返回为“empty”。

最终文件名中只允许使用ASCII字母、数字、短划线、下划线和点。如果可能,重音符号将被删除。空白被一个破折号替换。删除前导或尾随点或虚线。文件名限制为255个字符。

save(destination, overwrite=False, chunk_size=65536)[源代码]

将文件保存到磁盘或将其内容复制到打开的文件(-like)对象。如果 目的地 是一个目录, filename 添加到路径。默认情况下不会覆盖现有文件(ioerror)。

参数:
  • destination -- 文件路径、目录或文件(-like)对象。
  • overwrite -- 如果为真,则替换现有文件。(默认值:假)
  • chunk_size -- 一次读取的字节数。(默认值:64KB)

例外情况

exception BottleException[源代码]

Bottle 使用的异常的基类。

这个 Bottle 等级

class Bottle(**kwargs)[源代码]

每个bottle对象代表一个单独的、不同的Web应用程序,由路由、回调、插件、资源和配置组成。实例是可调用的WSGi应用程序。

参数:catchall -- 如果为真(默认),则处理所有异常。关闭以允许调试中间件处理异常。
config = None

A ConfigDict 应用程序特定配置。

resources = None

A ResourceManager 对于应用程序文件

catchall

如果为true,则捕获大多数异常并将其作为 HTTPError

add_hook(name, func)[源代码]

将回调附加到挂钩。目前实现了三个钩子:

before_request
在每个请求之前执行一次。请求上下文可用,但尚未发生路由。
after_request
在每个请求之后执行一次,不管其结果如何。
app_reset
无论何时呼唤 Bottle.reset() 被称为。
remove_hook(name, func)[源代码]

从钩子中删除回调。

trigger_hook(_Bottle__name, *args, **kwargs)[源代码]

触发一个钩子并返回结果列表。

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重定向到父应用程序的路由。

merge(routes)[源代码]

合并其他路由 Bottle 应用程序或列表 Route 对象。路线保留其“所有者”,这意味着 Route.app 属性未更改。

install(plugin)[源代码]

将插件添加到插件列表中,并准备将其应用于此应用程序的所有路由。插件可以是一个简单的修饰器,也可以是一个实现 Plugin 应用程序编程接口。

uninstall(plugin)[源代码]

卸载插件。传递一个实例以删除特定的插件,传递一个类型对象以删除与该类型匹配的所有插件,传递一个字符串以删除具有匹配项的所有插件 name 属性或 True 删除所有插件。返回已删除插件的列表。

reset(route=None)[源代码]

重置所有路由(强制重新应用插件)并清除所有缓存。如果给定了一个ID或路由对象,则只影响该特定路由。

close()[源代码]

关闭应用程序和所有已安装的插件。

run(**kwargs)[源代码]

电话 run() 参数相同。

match(environ)[源代码]

搜索匹配的路由并返回 (Route ,urlargs)元组。第二个值是一个字典,其中包含从URL提取的参数。提高 HTTPError (404/405)不匹配。

get_url(routename, **kargs)[源代码]

返回与命名路由匹配的字符串

add_route(route)[源代码]

添加路由对象,但不要更改 Route.app 属性。

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方法 (GETPOSTPUT ,…)或要侦听的方法列表。(默认: GET
  • callback -- 避免使用decorator语法的可选快捷方式。 route(..., callback=func) 等于 route(...)(func)
  • name -- 此路由的名称。(默认:无)
  • apply -- 装饰或插件或插件列表。除了已安装的插件外,它们还应用于路由回调。
  • skip -- 插件、插件类或名称的列表。匹配的插件没有安装到此路由。 True 跳过所有。

任何其他关键字参数都存储为路由特定的配置并传递给插件(请参见 Plugin.apply()

get(path=None, method='GET', **options)[源代码]

等于 route() .

post(path=None, method='POST', **options)[源代码]

等于 route() 用一个 POST 方法参数。

put(path=None, method='PUT', **options)[源代码]

等于 route() 用一个 PUT 方法参数。

delete(path=None, method='DELETE', **options)[源代码]

等于 route() 用一个 DELETE 方法参数。

patch(path=None, method='PATCH', **options)[源代码]

等于 route() 用一个 PATCH 方法参数。

error(code=500, callback=None)[源代码]

为HTTP错误代码注册输出处理程序。可以用作修饰器或直接调用:

def error_handler_500(error):
    return 'error_handler_500'

app.error(code=500, callback=error_handler_500)

@app.error(404)
def error_handler_404(error):
    return 'error_handler_404'
wsgi(environ, start_response)[源代码]

Bottle wsgi接口。

class Route(app, rule, method, callback, name=None, plugins=None, skiplist=None, **config)[源代码]

这个类包装了一个路由回调以及路由特定的元数据和配置,并根据需要应用插件。它还负责将URL路径规则转换为路由器可用的正则表达式。

app = None

此路由安装到的应用程序。

rule = None

路径规则字符串(例如 /wiki/<page>

method = None

HTTP方法的字符串(例如: GET)

callback = None

未应用任何插件的原始回调函数,用于内省。

name = None

route的名字,如未指定则为 None

plugins = None

路由特定插件的列表(请参见 Bottle.route()

skiplist = None

不适用于此路由的插件列表(请参见 Bottle.route()

config = None

传递给的其他关键字参数 Bottle.route() 装饰器存储在此字典中。用于路由特定的插件配置和元数据。

call[源代码]

应用了所有插件的路由回调。此属性是按需创建的,然后缓存以加速后续请求。

reset()[源代码]

忽略任何缓存值。下一次 call 访问后,所有插件都会重新应用。

prepare()[源代码]

立即完成所有按需工作(对调试很有用)。

all_plugins()[源代码]

生成影响此路由的所有插件。

get_undecorated_callback()[源代码]

返回回调。如果回调是修饰函数,请尝试恢复原始函数。

get_callback_args()[源代码]

返回回调(很可能)接受为关键字参数的参数名列表。如果回调是修饰函数,请在检查之前尝试恢复原始函数。

get_config(key, default=None)[源代码]

查找配置字段并返回其值,首先检查route.config,然后检查route.app.config。

这个 Request 对象

这个 Request 类包装了一个WSGi环境,并提供了解析和访问表单数据、cookie、文件上载和其他元数据的有用方法。大多数属性是只读的。

Request

bottle.BaseRequest 的别名

class BaseRequest(environ=None)[源代码]

为wsgi环境字典添加了许多方便的访问方法和属性的包装器。其中大多数是只读的。

向请求添加新属性实际上会将它们添加到环境字典中(如“bottle.request.ext.<name>”。这是存储和访问请求特定数据的推荐方法。

MEMFILE_MAX = 102400

的最大内存缓冲区大小 body 以字节为单位。

environ

包装好的wsgi环境字典。这是唯一真实的属性。所有其他属性实际上都是只读属性。

app[源代码]

Bottle 应用程序处理此请求。

route[源代码]

Bottle Route 与此请求匹配的对象。

url_args[源代码]

从URL提取的参数。

path

价值 PATH_INFO 只有一个前缀斜杠(用于修复损坏的客户机并避免出现“空路径”的边缘情况)。

method

这个 REQUEST_METHOD 值为大写字符串。

headers[源代码]

A WSGIHeaderDict 它提供对HTTP请求头不区分大小写的访问。

get_header(name, default=None)[源代码]

返回请求头的值或给定的默认值。

cookies[源代码]

Cookies 被解析成 FormsDict . 未解码签名的cookie。使用 get_cookie() 如果你想要签名的饼干。

返回cookie的内容。读一篇 Signed Cookie , the secret 必须与用于创建cookie的匹配(请参见 BaseResponse.set_cookie() )如果出现任何错误(缺少cookie或签名错误),请返回默认值。

query[源代码]

这个 query_string 解析成 FormsDict . 这些值有时称为“url参数”或“get参数”,但不要与“url通配符”混淆,因为它们由 Router .

forms[源代码]

从中解析的表单值 url-encodedmultipart/form-data 编码的POST或PUT请求主体。结果返回为 FormsDict . 所有键和值都是字符串。文件上载分别存储在 files .

params[源代码]

A FormsDict 其组合值为 queryforms . 文件上载存储在 files .

files[源代码]

文件上载分析自 multipart/form-data 编码的POST或PUT请求主体。这些值是 FileUpload .

json[源代码]

如果 Content-Type 页眉是 application/jsonapplication/json-rpc ,此属性保存请求正文的已分析内容。仅请求小于 MEMFILE_MAX 处理以避免内存耗尽。无效的JSON引发400错误响应。

body

HTTP请求主体是一个类似于对象的可查找文件。取决于 MEMFILE_MAX ,这是临时文件或 io.BytesIO 实例。首次访问此属性将读取并替换 wsgi.input 环境变量。后续访问只需执行 seek(0) 在文件对象上。

chunked

如果分块传输编码为,则为true。

GET

的别名 query .

POST[源代码]

价值观 formsfiles 组合成一个 FormsDict . 值是字符串(表单值)或的实例 cgi.FieldStorage (文件上传)。

url

完整的请求URI,包括主机名和方案。如果您的应用程序位于反向代理或负载均衡器之后,并且您得到令人困惑的结果,请确保 X-Forwarded-Host 收割台设置正确。

urlparts[源代码]

这个 url 字符串作为 urlparse.SplitResult 元组。tuple包含(scheme、host、path、query_string和fragment),但fragment始终为空,因为它对服务器不可见。

fullpath

请求路径包括 script_name (如果有的话)。

query_string

原始的 query URL的一部分(介于 ?# )作为字符串。

script_name

URL的初始部分 path 在调用应用程序之前被更高级别(服务器或路由中间件)删除。返回的脚本路径带有前导和尾随斜杠。

path_shift(shift=1)[源代码]
移动路径段 pathscript_name
反之亦然。
参数:shift -- 要移动的路径段数。可以为负来改变换档方向。(默认值:1)
content_length

请求正文长度为整数。客户端负责设置此头。否则,主体的实际长度未知,并返回-1。在这种情况下, body 将为空。

content_type

内容类型头作为小写字符串(默认值:空)。

is_xhr

如果请求由xmlhttpRequest触发,则为true。这只适用于支持 X-Requested-With 标题(大多数流行的库都有)。

is_ajax

Alias is_xhr . "“Ajax”不是正确的术语。

auth

HTTP身份验证数据作为(用户、密码)元组。此实现当前仅支持基本(而不是摘要式)身份验证。如果身份验证发生在更高级别(例如在前端Web服务器或中间件中),则密码字段为无,但用户字段是从 REMOTE_USER 环境变量。如果出现任何错误,将不返回任何错误。

remote_route

此请求中涉及的所有IP的列表,从客户端IP开始,后跟零个或多个代理。只有当所有代理都支持 `X-Forwarded-For 标题。请注意,此信息可能是恶意客户端伪造的。

remote_addr

作为字符串的客户端IP。请注意,此信息可能是恶意客户端伪造的。

copy()[源代码]

返回一个新的 Request 浅薄 environ 复制。

模块级别 bottle.request 是代理对象(实现于 LocalRequest )总是指 current 请求,或者换句话说,当前线程中请求处理程序当前处理的请求。这个 thread locality 确保您可以在多线程环境中安全地使用全局实例。

class LocalRequest(environ=None)[源代码]

线程的局部子类 BaseRequest 每个线程有一组不同的属性。此类通常只有一个全局实例 (request )如果在请求/响应周期中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。

bind(environ=None)

包装wsgi环境字典。

environ

线程本地属性

request = <LocalRequest: GET http://127.0.0.1/>

的线程安全实例 LocalRequest . 如果从请求回调中访问,则此实例始终引用 现在的 请求(即使在多线程服务器上)。

Response 对象

这个 Response 类存储要发送到客户端的HTTP状态代码以及头和cookie。类似 bottle.request 本地有一个线程 bottle.response 可用于调整 current 反应。此外,您可以实例化 Response 并从您的请求处理程序返回它。在这种情况下,自定义实例会否决全局实例中定义的头和cookie。

Response

bottle.BaseResponse 的别名

class BaseResponse(body='', status=None, headers=None, **more_headers)[源代码]

响应主体以及头和cookie的存储类。

这个类支持类似dict的不区分大小写的项对头的访问,但不是dict。最明显的是,在响应上迭代会产生部分主体而不是头。

参数:
  • body -- 作为受支持类型之一的响应主体。
  • status -- HTTP状态代码(例如200)或包含原因短语的状态行(例如“200 OK”)。
  • headers -- 名称-值对的字典或列表。

其他关键字参数将添加到头列表中。标题名称中的下划线将替换为短划线。

copy(cls=None)[源代码]

返回自身的副本。

status_line

HTTP状态行作为字符串(例如 404 Not Found

status_code

HTTP状态代码为整数(例如404)。

status

用于更改HTTP响应状态的可写属性。它接受数字代码(100-999)或带有自定义原因短语的字符串(例如“404 Brain Not Found”)。两个 status_linestatus_code 相应更新。返回值始终是状态字符串。

headers

的实例 HeaderDict ,响应头上不区分大小写的类似dict的视图。

get_header(name, default=None)[源代码]

返回以前定义的头的值。如果没有具有该名称的头,则返回默认值。

set_header(name, value)[源代码]

创建一个新的响应头,用相同的名称替换以前定义的任何头。

add_header(name, value)[源代码]

添加一个额外的响应头,而不是删除重复项。

iter_headers()[源代码]

生成(头、值)元组,跳过当前响应状态代码不允许的头。

headerlist

wsgi符合(header,value)元组列表。

content_type

“content-type”头的当前值。

content_length

“content-length”头的当前值。

expires

“expires”头的当前值。

charset

返回在内容类型头中指定的字符集(默认值:utf8)。

创建新的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。允许的属性: laxstrict . 在严格模式下,永远不会发送cookie。在LAX模式下,cookie只与顶级GET请求一起发送。

如果既不 expires 也不 maxage 设置为(默认),cookie将在浏览器会话结束时过期(浏览器窗口关闭后)。

签名的cookie可以存储任何可酸洗的对象,并通过密码签名来防止操作。请记住,在大多数浏览器中,cookie限制在4KB。

警告:pickle是一种潜在的危险格式。如果攻击者获得了对密钥的访问权,他可以伪造cookies,如果不点击,在服务器端执行代码。不鼓励使用泡菜,在以后的 Bottle 版本中会去掉对它的支持。

警告:签名的cookie未加密(客户端仍然可以看到内容)且未受复制保护(客户端可以还原旧cookie)。其主要目的是为了节省酸洗和拆封,而不是在客户方存储机密信息。

删除cookie。一定要用同样的 domainpath 用于创建cookie的设置。

class LocalResponse(body='', status=None, headers=None, **more_headers)[源代码]

线程的局部子类 BaseResponse 每个线程有一组不同的属性。此类通常只有一个全局实例 (response )它的属性用于在请求/响应周期结束时构建HTTP响应。

bind(body='', status=None, headers=None, **more_headers)

初始化自身。请参阅帮助(键入(self))以获得准确的签名。

body

线程本地属性

以下两个类可以作为异常引发。最明显的区别是 Bottle 调用错误处理程序 HTTPError ,但不是为了 HTTPResponse 或其他响应类型。

exception HTTPResponse(body='', status=None, headers=None, **more_headers)[源代码]
exception HTTPError(status=None, body=None, exception=None, traceback=None, **more_headers)[源代码]

模板

支持的所有模板引擎 bottle 实施 BaseTemplate 应用程序编程接口。这样就可以在不更改应用程序代码的情况下切换和混合模板引擎。

class BaseTemplate(source=None, name=None, lookup=None, encoding='utf8', **settings)[源代码]

模板适配器的基类和最小API

__init__(source=None, name=None, lookup=None, encoding='utf8', **settings)[源代码]

创建新模板。如果缺少源参数(str或buffer),则name参数用于猜测模板文件名。子类可以假定已设置self.source和/或self.filename。两者都是字符串。查找、编码和设置参数存储为实例变量。lookup参数存储包含目录路径的列表。编码参数应用于解码字节字符串或文件。settings参数包含用于特定于引擎的设置的dict。

classmethod search(name, lookup=None)[源代码]

在查找中指定的所有目录中搜索名称。首先没有,然后有公共扩展。返回第一个命中。

classmethod global_config(key, *args)[源代码]

这将读取或设置存储在class.settings中的全局设置。

prepare(**options)[源代码]

运行准备(分析、缓存…)。应该可以再次调用它来刷新模板或更新设置。

render(*args, **kwargs)[源代码]

使用指定的局部变量呈现模板,并返回单字节或Unicode字符串。如果是字节字符串,则编码必须与self.encoding匹配。这个方法必须是线程安全的!局部变量可以在字典(args)中提供,也可以直接作为关键字(kwargs)提供。

view(tpl_name, **defaults)[源代码]

decorator:为处理程序呈现模板。处理程序可以这样控制其行为:

  • 返回模板变量的dict以填充模板
  • 返回dict之外的内容,视图修饰器将不处理模板,而是按原样返回处理程序结果。这包括返回一个httpresponse(dict)以获取,例如,带有autojson或其他castfilters的json。
template(*args, **kwargs)[源代码]

获取作为字符串迭代器呈现的模板。可以使用名称、文件名或模板字符串作为第一个参数。模板呈现参数可以作为字典或直接(作为关键字参数)传递。

您可以为您喜爱的模板引擎编写自己的适配器,或者使用一个预定义的适配器。目前有四个完全支持的模板引擎:

等级 URL 装饰者 渲染函数
SimpleTemplate SimpleTemplate 模板引擎 view() template()
MakoTemplate http://www.makotemplates.org mako_view() mako_template()
CheetahTemplate http://www.cheetahtemplate.org/ cheetah_view() cheetah_template()
Jinja2Template http://jinja.pocoo.org/ jinja2_view() jinja2_template()

使用 MakoTemplate 作为默认模板引擎,只需导入其专用的decorator和render函数:

from bottle import mako_view as view, mako_template as template