社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 轻量级 Web 框架:Bottle 库!

Python编程 • 1 年前 • 197 次点击  

来自:CSDN,作者:宋宋讲编程

链接:https://blog.csdn.net/qiqi1220/article/details/126030157

Bottle是一个超轻量级的python库。说是库,其本身只由一个4000行左右的文件构成,并且不需要任何依赖,只靠python标准库即可运作。


和它本身的轻便一样,Bottle库的使用也十分简单。相信在看到本文前,读者对python也已经有了简单的了解。那么究竟何种神秘的操作,才能用百行代码完成一个服务器的功能?让我们拭目以待。

一. Bottle库安装


1)使用pip安装


2)下载Bottle文件

https://github.com/bottlepy/bottle/blob/master/bottle.py

二、“HelloWorld!”

所谓万事功成先HelloWorld,从这个简单的示例中,了解Bottle的基本机制。


先上代码:
首先我们从bottle库中导入getrun两个方法。


接下来,我们要构建一个网站,首先要有一个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部署到其他的服务器,非常简单的实现多线程,这些功能有待读者大大发掘哦!
--- EOF ---


推荐↓↓↓
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/146558
 
197 次点击