Bottle是一个超轻量级的python库。说是库;其本身只由一个4000行左右的文件构成;并且不需要任何依赖;只靠python标准库即可运作。
和它本身的轻便一样;Bottle库的使用也十分简单。相信在看到本文前;读者对python也已经有了简单的了解。那么究竟何种神秘的操作;才能用百行代码完成一个服务器的功能?让我们拭目以待。
一; Bottle库安装
1;使用pip安装
2;下载Bottle文件
https://github.com/bottlepy/bottle/blob/master/bottle.py
二;“HelloWorld;”
所谓万事功成先HelloWorld;从这个简单的示例中;了解Bottle的基本机制。
先上代码;
首先我们从bottle库中导入get和run两个方法。
接下来;我们要构建一个网站;首先要有一个ip地址和一个端口;port;;这部分功能由run来完成;在测试环节我们就使用127.0.0.1;本机地址;和80端口;浏览器默认端口;来运行这段代码 python HelloWorld.py
这样网站服务器就处于运行状态啦;打开浏览器;输入127.0.0.1(:80)
熟悉的404;错误提示Not found;‘/’。这是当然的;因为网站除了服务器之外;还有很重要的成分——网页啊;
浏览器访问ip地址时;即向这个ip发送了get请求;等待返回网页数据;那么我们的bottle库里;封装了get方法;用来实现这一过程。
代码如下;
不知道大家是否认识def上面的;符号;这个符号是python语法中的装饰器的意思;可以简单的理解为使用get函数对Homepage进行修饰。在这里;;get(‘/’)即将homepage装饰成了浏览器发送GET 127.0.0.1/这个请求时的相应函数。可以做任意处理;最后返回get请求的相应。这里就返回了简单的HelloWorld页面;再次运行;就有这样的效果;
也可以使用bottle中封装的template方法;将网页数据单独写在.tpl文件中;示例如下;
run函数还有一个参数reloader;将其设置为True将会打开自动重载;网页服务器会在你做出任何更改时自动重载服务器;可实现网站的热更新。
三;动态路由及文件下载
如上我们使用的get(‘/’);本质上是一种静态路由;在服务器运行前就确定好的地址可以用这种方法来进行路由。
那么如果是服务器运行时呢?比如说网站服务器上存取文件;当然不能采取静态的方式;这时候我们就可以采用动态路由。
Bottle的动态路由;由route方法实现;和get类似;也是采用装饰器来修饰函数实现路由功能。
这里我们看到在装饰器的参量中出现了一个与众不同的东西:;name;。被其修饰的函数的参数与冒号后的参量同名;而在函数中;就可以使用name这个参数作为处理变量;最后返回响应即可。
而动态路由即可为文件路由提供便利。一个服务器中可能存放着成百上千的文件;不可能每个都依靠静态地址。
这里我们可以看到一个新的函数static_file;第一个参数为文件名;第二个参数为根目录地址;即这个文件所在的位置;;当前文件系统为;
--HelloWorld.py
--store1.txt
访问浏览器得到
当然你也可以把文件放在文件夹里;只要把root参数更换成文件夹的地址即可。
四; POST的响应与文件上传
如果要实现更复杂的功能;我们不但需要使用GET方法;也需要POST方法。这里我们使用HTML语言中的Form来演示Bottle库对于POST请求的响应。
首先我们实现一个上传文件的窗口;如上。
此处的页面为一个简单的表单提交界面;在此不做详细介绍;打开页面如下;
接下来的POST响应;代码如下;
从Bottle库中导入post方法和request。
和get方法类似;使用post装饰响应函数;之后在函数体中使用request即可获取网站服务器接受到的post请求体。request.forms.get()方法可以将表单中对应Key的字符串取出;request.files.get()方法可以将表单中对应Key的文件取出;使用save方法将数据储存就实现了文件的上传。
接下来我们进行一次测试;
点击上传后;我们打开服务器根目录;就是python文件的位置;;查看发现文件已经上传成功;
五;小结
在完成这些功能后;你一定想把bottle部署到网络上吧;毕竟只在本地运行的话;网站又有什么作用呢?
清华网为我们每一个网络接入点都提供了公网ip;在cmd中使用ipconfig查看ip地址;将run中的运行参数改为你的公网ip;然后在任何一台设备的浏览器上;建议手机;电脑浏览器有时候会很慢;输入ip地址和端口号(默认80);就可以访问啦;
Bottle库还有很多强大的功能;Cookie的读写、插件的安装卸载与禁用都不在话下;也可以将Bottle部署到其他的服务器;非常简单的实现多线程;这些功能有待读者大大发掘哦;
总结了很多有关于python面试的资料;希望能够帮助正在学习python的小伙伴。由于资料过多不便发表文章;创作不易;望小伙伴们能够给我一些动力继续创建更好的python类学习资料文章;
请多多支持和关注小作;别忘了点赞;评论;转发。右上角私信我回复【999】即可领取免费学习资料谢谢啦;