Bottle是一个轻量级的Python Web框架,它提供了
路由、请求解析和
模板渲染等基本功能。
Python的Bottle框架是一个轻量级的Web开发工具,适用于快速构建小型Web应用,以下是对Python的Bottle框架的基本知识归纳:
基本映射
Bottle通过@route()
装饰器实现URL与函数的映射。@route('/hello')
定义了一个处理GET请求的hello()
函数,当访问http://localhost:8080/hello
时,服务器将返回字符串"Hello World!",这个装饰器接受可选参数method
,默认为GET,支持POST、PUT、DELETE、HEAD等HTTP方法。
动态映射
Bottle允许在URL中使用:placeholder
作为动态变量,如@route('/hello/:name')
,参数name
会在请求时被替换,默认情况下,:placeholder
会一直匹配到下一个斜线,如果需要更精确的匹配,可以使用正则表达式,如@route('/get_object/:id#[09]+#')
或@route('/get_object/(?P[09]+)')
。
类型转换
虽然URL参数默认为字符串,但当参数是数字时,需要显式进行类型强制转换,如return "Object ID:%d" % int(id)
。
验证功能
Bottle提供了@validate()
装饰器,用于简化参数的验证过程,装饰器可以根据关键字和过滤器对每个URL参数进行处理,确保请求的有效性,这在处理用户输入时非常有用,可以防止恶意数据注入。
返回文件流和JSON
WSGI规范不能处理文件对象或字符串,Bottle自动转换字符串类型为iter对象,下面的例子可以在Bottle下运行,但是不能运行在纯WSGI环境下,字典类型也是允许的,会转换成json格式,自动返回ContentType: application/json。
Cookies
Bottle是把cookie存储在request.COOKIES变量中,新建cookie的方法是response.set_cookie(name, value[, **params]). 它可以接受额外的参数,属于SimpleCookie的有有效参数。
模板
Bottle使用自带的小巧的模板,你可以使用调用template(template_name, **template_arguments)并返回结果,模板是根据bottle.TEMPLATE_PATH列表变量去搜索,默认路径包含[‘./%s.tpl’, ‘./views/%s.tpl’],模板在编译后在内存中缓存,修改模板不会更新缓存,直到你清除缓存,调用bottle.TEMPLATES.clear()。
常见问题解答(FAQs)
问题1:如何在Bottle中设置静态文件服务?
答:在Bottle中,可以使用static_file()
装饰器来提供静态文件服务,以下是一个示例代码:
from bottle import route, run, static_file
@route('/static/')
def serve_static(filename):
return static_file(filename, root='/path/to/static/files')
run(host='localhost', port=8080)
在这个示例中,我们定义了一个静态文件服务路由/static/
,将静态文件从指定目录中返回给客户端。
问题2:如何在Bottle中定义中间件?
答:在Bottle中,可以使用app.middleware()
装饰器来定义中间件,以下是一个示例代码:
from bottle import Bottle, run, request
app = Bottle()
@app.middleware('request')
def check_auth():
token = request.headers.get('Authorization')
if not token or token != 'Bearer secret_token':
return {'error': 'Unauthorized'}, 401
@app.route('/protected')
def protected_route():
return 'Protected Resource'
run(app, host='localhost', port=8080)
在这个示例中,我们定义了一个中间件函数check_auth()
,用于检查请求头中的Authorization信息,保护了路由/protected
的访问。
Python的Bottle框架基本知识归纳
1. 简介
Bottle 是一个简单的 Python Web 框架,用于快速开发单文件 Web 应用程序,它旨在保持简单、轻量级且易于扩展。
2. 安装
要安装 Bottle,可以使用 pip:
pip install bottle
3. 快速入门
以下是一个简单的 Bottle 应用示例:
from bottle import Bottle, route, run
app = Bottle()
@route('/')
def hello_world():
return "Hello World!"
if __name__ == '__main__':
run(app)
运行上述代码后,访问http://127.0.0.1:8080/
将显示 "Hello World!"。
4. 路由和视图函数
Bottle 使用装饰器@route()
来定义路由,每个路由都关联一个视图函数,用于处理请求并返回响应。
@route('/')
def index():
return "这是主页!"
5. 变量捕获
可以使用
占位符在 URL 中捕获变量。
@route('/hello/')
def hello_name(name):
return f"Hello {name}!"
6. 路由参数
除了路径参数,还可以在 URL 中使用查询参数。
@route('/greet')
def greet():
name = request.query.name or 'Guest'
return f"Hello {name}!"
7. HTTP 方法
Bottle 支持 GET、POST、PUT、DELETE 等HTTP方法。
@route('/login', method='POST')
def login():
username = request.forms.get('username')
password = request.forms.get('password')
# 处理登录逻辑
return "登录成功!"
8. 响应和错误处理
可以使用response
对象来设置响应内容、状态码等。
@route('/error')
def error():
response.status = 404
return "页面未找到!"
9. 静态文件
Bottle 可以用来提供静态文件,如 CSS、JavaScript 和图片。
@route('/static/')
def static_file(filename):
return static_file(filename, root='./static')
10. 扩展
Bottle 支持多种扩展,如模板引擎(如 Jinja2)、数据库支持等。
from bottle import template
@route('/hello/')
def hello(name):
return template('hello.html', name=name)
11. 归纳
Bottle 是一个轻量级的 Web 框架,适合快速开发和原型设计,它易于使用,且没有过多的依赖,非常适合小到中型的 Web 应用。