Bottle 是一个快速、简单且轻量级的 Python WSGI 微型 Web 框架。它以单文件模块的形式分发,并且除了 Python 标准库之外没有任何外部依赖。Bottle 的设计哲学是极简主义,非常适合构建小型 Web 应用、RESTful API 服务或作为学习 Web 开发基础的入门框架。
一、安装与快速入门
安装 Bottle 非常简单,只需通过 pip 即可完成:
pip install bottle
下面是一个最基础的 Bottle 应用,它创建了一个简单的 Web 服务:
from bottle import route, run
@route('/hello')
def hello():
return "Hello World!"
if __name__ == '__main__':
run(host='localhost', port=8080)运行上述代码后,在浏览器中访问 http://localhost:8080/hello 即可看到输出结果。
二、核心概念详解
1. 路由
路由用于将用户的请求 URL 映射到对应的 Python 函数。Bottle 支持静态路由和动态路由。
from bottle import route
@route('/user/<name>')
def greet(name='Guest'):
return f'Hello, {name}!'在动态路由中,可以使用过滤器来限制参数类型,例如 <name:int> 限制只匹配整数,<path:path> 匹配包含斜杠的完整路径。
2. HTTP 请求方法
Bottle 支持常见的 HTTP 方法,如 GET、POST、PUT、DELETE 等。可以通过 route 装饰器的 method 参数指定,或者使用对应的快捷装饰器。
from bottle import get, post, request
@get('/form')
def show_form():
return '''<form action="/submit" method="post">
<input name="name" type="text"/>
<button type="submit">Submit</button>
</form>'''
@post('/submit')
def submit():
name = request.forms.get('name')
return f'Submitted name: {name}'3. 请求对象
Bottle 提供了基于线程局部变量的全局 request 对象来安全地访问请求数据,如查询参数、表单数据、文件上传和 Cookie 等。
from bottle import request
# 获取查询参数 ?id=123
query_id = request.query.id
# 获取 POST 表单数据
username = request.forms.get('username')
# 获取上传的文件
upload_file = request.files.get('upload')4. 响应对象
视图函数的返回值即为响应体。如果返回的是字典或列表,Bottle 会自动将其转换为 JSON 格式。同时可以通过全局的 response 对象设置状态码和响应头。
from bottle import route, response
@route('/api/data')
def api_data():
response.content_type = 'application/json'
return {'status': 'success', 'data': [1, 2, 3]}三、模板引擎
Bottle 内置了一个快速且轻量的模板引擎 SimpleTemplate。它允许在 HTML 中嵌入纯 Python 代码,语法简洁高效。
from bottle import route, template
@route('/hello/<name>')
def index(name):
return template('hello_template', name=name)对应的 hello_template.tpl 文件内容如下:
Hello {{name}}!
% if name == 'Admin':
Welcome back, administrator!
% else:
Welcome to our site.
% end在模板中,{{}} 用于变量输出,% 用于 Python 代码行,需要注意缩进逻辑的控制。
四、运行与部署
Bottle 默认内置了一个基于 wsgiref 的单线程开发服务器,仅适用于开发和测试。在生产环境中,建议使用多线程或多进程的 WSGI 服务器,如 Gunicorn 或 uWSGI。
使用 Gunicorn 部署示例:
pip install gunicorn gunicorn myapp:app
其中 myapp 是 Python 文件名,app 是 Bottle 应用实例。应用代码调整如下:
from bottle import Bottle
app = Bottle()
@app.route('/')
def index():
return "Production Ready!"
# 不再调用 run(),而是交由 Gunicorn 管理五、总结
Bottle 作为一个微型框架,其最大的优势在于零依赖和极低的学习成本。它非常适合用于构建微服务、小型 API 接口、物联网后端或是简单的内部工具。当项目规模逐渐扩大,需要 ORM、复杂的表单验证等重型组件时,可以考虑迁移至 Django 或 Flask 等更全面的框架。但对于追求轻量与速度的场景,Bottle 无疑是极佳的选择。