这篇Bottle 教程是比较基础的,主要讲解Bottle?的基本映射和动态映射。
基本映射
映射使用在根据不同 URLs 请求来产生相对应的返回内容。
Bottle 使用 route() 修饰器来实现映射。
from bottle import route, [email protected](’/hello’)def hello():
return "Hello World!"
run() # This starts the HTTP server
运行这个程序,访问 http://localhost:8080/hello 将会在浏览器里看到 "Hello World!"。
GET, POST, HEAD, ...
这个映射装饰器有可选的关键字 method 默认是 method=’GET’。
还有可能是 POST,PUT,DELETE,HEAD 或者监听其他的 HTTP 请求方法。
from bottle import route, [email protected](’/form/submit’, method=’POST’)def form_submit():
form_data = request.POST
do_something(form_data)
return "Done"
动态映射
你可以提取 URL 的部分来建立动态变量名的映射。
@route(’/hello/:name’)def hello(name):
return "Hello %s!" % name
默认情况下,一个 :placeholder 会一直匹配到下一个斜线。
需要修改的话,可以把正则字符加入到 #s 之间:
@route(’/get_object/:id#[0-9]+#’)def get(id):
return "Object ID: %d" % int(id)
或者使用完整的正则匹配组来实现:
@route(’/get_object/(?P<id>[0-9]+)’)def get(id):
return "Object ID: %d" % int(id)
正如你看到的,URL 参数仍然是字符串,即使你正则里面是数字。
你必须显式的进行类型强制转换。
@validate() 装饰器
Bottle 提供一个方便的装饰器 validate() 来校验多个参数。
它可以通过关键字和过滤器来对每一个 URL 参数进行处理然后返回请求。
from bottle import route, validate# /test/validate/1/2.3/4,5,6,[email protected](’/test/validate/:i/:f/:csv’)@validate(i=int, f=float, csv=lambda x: map(int, x.split(’,’)))def validate_test(i, f, csv):
return "Int: %d, Float:%f, List:%s" % (i, f, repr(csv))
你可能需要在校验参数失败时抛出 ValueError。
文章来自:segmentfault