Python 轻量级 Web 框架:Bottle 库!
共 2272字,需浏览 5分钟
· 2022-08-26
Bottle是一个超轻量级的python库。说是库,其本身只由一个4000行左右的文件构成,并且不需要任何依赖,只靠python标准库即可运作。
和它本身的轻便一样,Bottle库的使用也十分简单。相信在看到本文前,读者对python也已经有了简单的了解。那么究竟何种神秘的操作,才能用百行代码完成一个服务器的功能?让我们拭目以待。
![](https://filescdn.proginn.com/b8247df9519de360976bc861416f8487/129a3fd145c4af7b56f14e01e5ef37ca.webp)
一. Bottle库安装
![](https://filescdn.proginn.com/b99aaab22587bd55ab0d8a50a2f4f6a1/0ca27cf23d6958d5f3d2518ff1143936.webp)
1)使用pip安装
pip install bottle
2)下载Bottle文件
https://github.com/bottlepy/bottle/blob/master/bottle.py
![](https://filescdn.proginn.com/b8247df9519de360976bc861416f8487/129a3fd145c4af7b56f14e01e5ef37ca.webp)
二.“HelloWorld!”
![](https://filescdn.proginn.com/b99aaab22587bd55ab0d8a50a2f4f6a1/0ca27cf23d6958d5f3d2518ff1143936.webp)
所谓万事功成先HelloWorld,从这个简单的示例中,了解Bottle的基本机制。
![](https://filescdn.proginn.com/62ed7be5eebe53c8abbb0f25c0205edb/388b89a9fb4d15c6a73e6fb127460fe4.webp)
![](https://filescdn.proginn.com/868db5fa4f60d0bca1fbf9709ece7e23/8906bcb955d54cd3201551d15f9df168.webp)
![](https://filescdn.proginn.com/11da522556d392b7f17d3672f2f65d07/c48de876c76b75899e3e4b099e747b19.webp)
熟悉的404,错误提示Not found:‘/’。这是当然的,因为网站除了服务器之外,还有很重要的成分——网页啊!
浏览器访问ip地址时,即向这个ip发送了get请求,等待返回网页数据,那么我们的bottle库里,封装了get方法,用来实现这一过程。
![](https://filescdn.proginn.com/b79f80b4fb6d1f7ded94abcab3f76f4e/296c27953d47f66dae9ed26103ba7859.webp)
不知道大家是否认识def上面的@符号,这个符号是python语法中的装饰器的意思,可以简单的理解为使用get函数对homepage进行修饰。在这里,@get(‘/’)即将homepage装饰成了浏览器发送GET 127.0.0.1/这个请求时的相应函数。可以做任意处理,最后返回get请求的相应。这里就返回了简单的HelloWorld页面,再次运行,就有这样的效果:
![](https://filescdn.proginn.com/cdafa1572daf225f43992ca20ad2868a/6e53cc3d88acd51130aeeb1bd1986809.webp)
也可以使用bottle中封装的template方法,将网页数据单独写在.tpl文件中,示例如下:
![](https://filescdn.proginn.com/c976534f82b6dfdfc696697b7d52d68a/92ca03861c914b6e459f67eca87a0072.webp)
![](https://filescdn.proginn.com/b8247df9519de360976bc861416f8487/129a3fd145c4af7b56f14e01e5ef37ca.webp)
三.动态路由及文件下载
![](https://filescdn.proginn.com/b99aaab22587bd55ab0d8a50a2f4f6a1/0ca27cf23d6958d5f3d2518ff1143936.webp)
如上我们使用的get(‘/’),本质上是一种静态路由,在服务器运行前就确定好的地址可以用这种方法来进行路由。
那么如果是服务器运行时呢?比如说网站服务器上存取文件,当然不能采取静态的方式,这时候我们就可以采用动态路由。
![](https://filescdn.proginn.com/49af15af1534eb7c0fbe4d50d0a47340/57de73103ae5c32664c0fccddde4f4e4.webp)
这里我们看到在装饰器的参量中出现了一个与众不同的东西:'name'。被其修饰的函数的参数与冒号后的参量同名,而在函数中,就可以使用name这个参数作为处理变量,最后返回响应即可。
![](https://filescdn.proginn.com/3c6a6642357320c6191ecc7d6c537f03/a6dd65296ad3f3bf5f7d87a7ed47e2cb.webp)
![](https://filescdn.proginn.com/61bdff22e872c11b27b4da0d5a3a78e1/2147842cd5fb7df823821adfd0a3ee1d.webp)
![](https://filescdn.proginn.com/f0329d3e7a086ab9556ab1b8e1339be5/481e4a3b7feb97e3258a3af888b69601.webp)
当然你也可以把文件放在文件夹里,只要把root参数更换成文件夹的地址即可。
![](https://filescdn.proginn.com/b8247df9519de360976bc861416f8487/129a3fd145c4af7b56f14e01e5ef37ca.webp)
四. POST的响应与文件上传
![](https://filescdn.proginn.com/b99aaab22587bd55ab0d8a50a2f4f6a1/0ca27cf23d6958d5f3d2518ff1143936.webp)
![](https://filescdn.proginn.com/f8b0f3fdb4d339b8c64422654f336f1c/6f31c035618ee93362baa245d4f11998.webp)
首先我们实现一个上传文件的窗口,如上。
此处的页面为一个简单的表单提交界面,在此不做详细介绍,打开页面如下:
![](https://filescdn.proginn.com/706fd129426f3043f36bdaeb4b7c9897/a1d0517ee5e45f6b95ea1632eb009afe.webp)
![](https://filescdn.proginn.com/c9d8dacc6bfe82d4e6600d307ee2d465/34a49c1ed9b0c6b798a5e69cc3f2266e.webp)
和get方法类似,使用post装饰响应函数,之后在函数体中使用request即可获取网站服务器接受到的post请求体。request.forms.get()方法可以将表单中对应Key的字符串取出,request.files.get()方法可以将表单中对应Key的文件取出,使用save方法将数据储存就实现了文件的上传。
![](https://filescdn.proginn.com/1173797b8f1c5397d9ff54cc9cc144c7/6b9ca2746ff68b04e6e6febded70ebe4.webp)
![](https://filescdn.proginn.com/4b89c765f6477070c72c85e7e83e2585/76d167466c5a8189aff2e114d0bc7634.webp)
![](https://filescdn.proginn.com/b8247df9519de360976bc861416f8487/129a3fd145c4af7b56f14e01e5ef37ca.webp)
五.小结
![](https://filescdn.proginn.com/b99aaab22587bd55ab0d8a50a2f4f6a1/0ca27cf23d6958d5f3d2518ff1143936.webp)
在完成这些功能后,你一定想把bottle部署到网络上吧,毕竟只在本地运行的话,网站又有什么作用呢?
清华网为我们每一个网络接入点都提供了公网ip,在cmd中使用ipconfig查看ip地址,将run中的运行参数改为你的公网ip,然后在任何一台设备的浏览器上(建议手机,电脑浏览器有时候会很慢)输入ip地址和端口号(默认80),就可以访问啦!
原文出自:https://blog.csdn.net/qiqi1220/article/details/126030157
训练营本周六开课,如想进一步提升测开技能,推荐阅读:
END
![](https://filescdn.proginn.com/84ed32972d0dcd5738e045378b1d9198/4575911b49966d731663a1be9d03a685.webp)
长按二维码/微信扫码 添加作者