一大堆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里, request 和 response 两个大宝贝。举个收表单的例子:
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最带劲的地方。