Skip to content

Bottle,微型Web框架的轻量之选!

发表: at 13:00

一大堆Web框架,选谁?选轻量的!Bottle就是这种不拖泥带水的类型。代码短小精悍,功能却不打折。适合刚入门Python,想写个小网站、API,甚至偶尔突发奇想造个小工具。别想着它有Django那种“家底厚”,人家讲究的是一个“轻”,一个“快”。这回聊聊Bottle怎么玩,怎么写代码,怎么踩坑。别眨眼,马上开干。

迷你框架,真不骗人

Bottle有多小?整个框架就一个.py文件,大概比我的早餐面包还轻。你不用一通乱装插件,也不用被一堆配置文件吓到。pip install bottle一句就能搞定。框架有啥? 路由模板请求处理 ,这些Web开发的硬通货,Bottle一个不少。

from bottle import run, route
@route('/hello')
def hello()
    return “Hello, Bottle!”
run(host='localhost'port=8080)

这几行就能跑一个Web服务器。打开浏览器,输localhost:8080/hello,会看到页面上写着“Hello, Bottle!”是不是有点小激动?别着急,这只是开胃菜。

路由,URL和函数的桥梁

Web开发里, 路由 是个高频词。说白了,就是让不同的URL干不同的活。Bottle里搞路由,就像贴标签一样简单。

from bottle import route
@route('/hello/<name>')
def greet(name)
    return f“Hi, {name}!”

这段代码的意思是,URL里/hello/xxx,xxx会自动变成name参数。比如你访问/hello/Lucy,页面上就会出现“Hi, Lucy!”。

温馨提示: 参数名和函数参数要对齐 。URL模板里叫<name>,函数参数也必须叫name。不然Bottle脾气上来,直接告诉你“找不到参数”。

路由还能搞点花样,比如用不同方法区分请求:

@route('/submit'method='POST')
def submit()
    return “表单已提交”

只允许POST请求。你要是用GET请求,Bottle会面无表情地拒绝你。

模板,HTML也能变活

网站光会返回字符串?那体验太“原始”。Bottle自带 模板系统 ,支持变量替换、循环啥的。看这个例子:

from bottle import template
@route('/user/<name>')
def user(name)
    return template('Hello {{name}}'name=name)

{{name}}这地方会被实际参数替换掉。访问/user/小明,页面就显示“Hello 小明!”。是不是有点魔法的味道?

还想写复杂点?模板支持if判断、for循环。把HTML和Python变量混着用,写啥像啥。

温馨提示:模板变量别乱拼,名字错了不会报错,页面直接空白。调试时可以先用固定值试试,别一上来就用变量。

请求和响应,和前端打交道

网站要和用户互动,得能收参数,发响应。Bottle里, requestresponse 两个大宝贝。举个收表单的例子:

from bottle import request
@route('/login'method='POST')
def login()
    username = request.forms.get('username')
    return f“欢迎你, {username}!”

这段代码收前端发来的username。表单里有啥,request.forms.get('xxx')就能拿到啥。

有时候要返回JSON,Bottle也能一把抓:

from bottle import response
@route('/api/data')
def api_data()
    response.content_type = 'application/json'
    return '{“msg”: “ok”}'

当然啦,手动写JSON太费劲,搭配Python的json模块用更舒服。

温馨提示:和前端联调时,content_type别忘了设置。前端拿到数据解析不出来,八成是这个地方出锅了。

静态文件,图片CSS也得有

网站要有样式、图片啥的,光靠代码不行。Bottle怎么搞?用static_file,文件一把抓。

from bottle import static_file
@route('/static/<filename>')
def server_static(filename)
    return static_file(filename, root='./static')

浏览器访问/static/logo.png,Bottle自动去static文件夹找logo.png。图片、CSS、JS全都能这样用。

温馨提示:路径别写错,root参数要用项目的实际路径。开发时建议用绝对路径,省得出错找不到。

异常处理,别让Bug吓退用户

网站哪有不出错的?页面404、500,用户体验崩了。Bottle自带 异常处理 机制,能自定义出错时的返回内容。

from bottle import error
@error(404)
def error404(error)
    return '页面找不到,可能走丢啦。'

用户访问不存在的页面,就能看到你定制的友好提示。比一堆英文报错页暖心得多。

温馨提示:调试时建议先看原始报错,开发完成后再加自定义错误页面。别把Bug“藏”起来了,自己都找不到。

学习小妙招和常见坑

玩Bottle,别老想着“大而全”,小而美才是它的精髓。写API、做工具、甚至嵌入大系统当微服务,都能用得上。代码改动快、上线也快,特别适合初学者练手。

有几个小坑别翻: 端口被占用 ,网站起不来,换个端口试试。 路径大小写 ,Linux下大小写敏感,路径错一个字母都找不到。 Python版本 ,建议用3.7及以上,新特性多,坑也少。

写代码时多试多改,不懂就加print,调试起来也有乐趣。遇到bug,别慌,慢慢查,Bottle的文档其实很全,英文不好的话配个翻译工具,能看懂。

小结

Bottle框架就是这么一个干净利落的家伙。路由、模板、请求、静态文件、异常处理,Web开发基本盘全有。适合快速上手、快速开发、快速找乐子。代码少,思路清,写多了你会发现,真正让人头痛的不是框架,而是你想做的那些有趣的功能。别怕出错,错了也能学到不少东西。Bottle代码可以很短,但你的思路可以很宽。玩的开心,代码写的越多,套路越多。这才是学Python、玩Web最带劲的地方。


上篇文章
用ADK开发一个新闻资讯Agent:超简单!
下篇文章
Next.js的隐秘挑战:Netlify面对的六大难题