Python的Bottle框架是一个轻量级、简单且高效的Web开发工具,适用于快速构建小型Web应用,它通过提供简洁的API和丰富的功能,使得开发者能够轻松地创建和管理Web应用。
基本映射
Bottle使用@route()
装饰器来实现URL与函数的映射,下面的代码将路径/hello
与hello()
函数关联:
from bottle import route, run @route('/hello') def hello(): return "Hello World!" run() # This starts the HTTP server
运行这段程序后,访问http://localhost:8080/hello
将在浏览器中显示"Hello World!"。
@route()
装饰器还支持多种HTTP请求方法,默认为GET,其他支持的方法包括POST、PUT、DELETE和HEAD。
@route('/form/submit', method='POST') def form_submit(): form_data = request.POST do_something(form_data) return "Done"
动态映射
Bottle允许在URL中使用占位符来捕获动态路径部分。
@route('/hello/:name') def hello(name): return "Hello %s!" % name
在这个例子中,访问/hello/John
时,hello()
函数中的name
参数将被设置为’John’。
可以通过正则表达式来限制占位符的格式。
@route('/get_object/:id#[09]+#') def get(id): return "Object ID: %d" % int(id)
或者使用完整的正则匹配组:
@route('/get_object/(?P<id>[09]+)') def get(id): return "Object ID: %d" % int(id)
需要注意的是,URL参数默认是字符串类型,即使正则表达式中定义的是数字,也需要显式进行类型转换。
@validate()装饰器
Bottle提供了一个方便的@validate()
装饰器用于验证多个URL参数。
from bottle import route, validate @route('/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异常。
返回文件流和JSON
WSGI规范不能处理文件对象或字符串,但Bottle会自动将字符串类型转换为iter对象,以下示例可以在Bottle下运行,但不能在纯WSGI环境下运行:
@route('/get_string') def get_string(): return "This is not a list of strings, but a single string"
对于返回文件流,可以使用以下方式:
@route('/file') def get_file(): return open('some/file.txt', 'r')
字典类型的数据会被自动转换成JSON格式,并返回ContentType: application/json:
@route('/api/status') def api_status(): return {'status': 'online', 'servertime': time.time()}
可以通过设置bottle.default_app().autojson = False
来关闭自动JSON转换功能。
Cookies
Bottle将cookie存储在request.COOKIES
变量中,新建cookie的方法是response.set_cookie(name, value[, **params])
。
from bottle import response response.set_cookie('key', 'value', path='/', domain='example.com', secure=True, expires=+500)
设置maxage属性可以在实例中修改cookie.SimpleCookie in response.COOKIES
。
模板
Bottle使用自带的小巧模板引擎,你可以通过调用template(template_name, **template_arguments)
并返回结果来使用模板。
@route('/hello/:name') def hello(name): return template('hello_template', username=name)
模板会根据bottle.TEMPLATE_PATH
列表变量去搜索,默认路径包含['./%s.tpl', './views/%s.tpl']
,模板在编译后会在内存中缓存,可以通过调用bottle.TEMPLATES.clear()
来清除缓存。
模板语法
模板语法围绕Python很薄的一层,主要目的是确保正确的缩进块,下面是一些模板语法的例子:
% ... Python代码开始,不必处理缩进问题,Bottle会为你做这些。 %end 关闭一些语句%if ...,%for ...或者其他,关闭块是必须的。 {{...}} 打印出Python语句的结果。 %include template_name optional_arguments 包括其。
FAQs
Q1: Bottle框架如何处理不同类型的URL参数?
A1: Bottle通过使用占位符(如:name
)来处理不同类型的URL参数,默认情况下,这些参数都是字符串类型,如果需要处理特定类型的参数,比如整数或浮点数,可以使用正则表达式进行匹配并在代码中进行显式的类型转换。@route('/get_object/:id#[09]+#')
将id
限定为数字,然后在函数内部将其转换为整数类型。
Q2: 如何在Bottle中验证URL参数?
A2: Bottle提供了@validate()
装饰器用于验证多个URL参数,这个装饰器可以接受多个参数,每个参数都可以指定验证规则。@validate(i=int, f=float, csv=lambda x: map(int, x.split(',')))
可以确保URL参数分别被解析为整数、浮点数和逗号分隔的整数列表,如果验证失败,可以抛出ValueError异常。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1102548.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复