余斌
摘要:Python语言在网络应用开发中占有重要的位置。Bottle是一个Python网络应用开发微框架。本文以一个简单日志系统为例,介绍了运用Bottle开发网络应用基本方法。
关键词:Python;WSGI;Bottle;网络;框架1引言
Python是一种完全面向对象的动态脚本语言。它以强制缩进来区分程序区块,代码可读性强;采用多种高级数据结构,应用开发快速高效;拥有丰富、高质量的类库,可满足各种类型应用开发要求。Python作为一种通用程序设计语言,常应用于网络应用、科学计算、图像处理等领域。
2Bottle简述
随着互联网技术快速发展,网络应用开发逐渐成为软件开发的一个主流方向。早期开发人员用Python开发CGI程序,必须手动处理网络协议解析,页面请求响应等细节。为了简化开发过程,Python定义了Web服务器网关接口即WSGI。著名的网络应用框架有Django,TurboGears,Zope等。它们网络应用功能全面,在网络开发中使用十分便捷。
Bottle是一个快速,简单,轻量级的网络应用微框架,它只提供请求映射、页面输出等必要的功能,而给予开发者更高灵活性以选择其它组件实现额外的功能。Bottle仅由一个文件构成,并且不依赖于Python标准库以外的第三方类库,保证了该框架的可移植性。Bottle还可以通过插件的形式支持ORM方式数据库访问,接入其它模板引擎,部署其它符合WSGI标准的WEB服务器,确保了框架高度可扩展性。
3开发实例
如图所示,网络用户通过客户端向服务器发出服务请求,服务器根据请求调用相应的网络应用程序。网络应用程序通过解析请求地址调用相应方法,该方法通过数据库访问接口对数据库进行操作,并将操作结果返回网络应用程序。网络应用框架决定以何种方式呈现这些数据,并通过WEB服务器发往客户端。客户端接收数据,解析HTML代码,呈现结果,完成一次完整的服务請求。结合网络应用程序的工作过程,我们以一个简单日志管理系统开发来介绍基于Bottle的网络应用开发流程。
3.1 安装Bottle
从Bottlepy.org下载Bottle源文件,并将该源文件放置于项目所在的目录即完成安装。在联网情况下,在控制台执行“easy_install bottle”,亦可自动安装Bottle。
3.2 配置数据库
在项目目录下执行以下代码即可创建SQLite3后台数据库。
$ sqlite3 blog.db < blog.sql
3.3 映射URL
网络应用框架最重要的功能是将浏览器对服务器地址的请求映射到Python网络程序的方法或者对象上。Bottle利用修饰器@route可灵活配置URL路由。在本应用中,@route('/blog')与@route('/blog/page/
3.4 方法实现
现以一个简单的回调显示函数blog为例说明Python对数据库的操作。该函数主要是实现对数据库的查询并在浏览器中显示查询结果。主要代码如下所示。
首先,连接数据库
conn = sqlite3.connect('blog.db')。
然后,定位数据库当前位置
c = conn.cursor()。
接着,在当前位置执行sql查询
c.execute("SELECT * FROM blog " )
最后,获得查询结果
results = c.fetchall()。
将查询结果作为参数传递给Bottle的模板对象template,框架Bottle即可自动实现将查询结果转发到WEB服务器。
对数据库其他操作,如插入,删除,修改的实现也都比较类似,在此不再一一赘述。
3.5 浏览器输出
Bottle可通过template(‘templatename,args)方法来调用其内建快速简洁的模板系统,其中templatename为所调用的模板名,args为给模板传入的参数。模板内可用%include语句引入其它模板,也可嵌入Python的for循环与if - else判断语句。例如,在模板内嵌入以下语句,就可将结果中的每个项目都输出到浏览器中。
3.6 分页显示
当查询数据库的结果较多时,一个页面往往无法容纳所有项目。我们可利用SQLite3分页查询来实现较多日志的分页显示。如:SELECT * FROM blog LIMIT 5 OFFSET 0,实现自第1个项目开始取回5个项目。
3.7 表单处理
Bottle用request对象的request.GET.get()方法来获得浏览器的数据。如有多个参数需要获取,则可以多次调用request.GET.get()方法来实现,并对获取的数据可以再进行进一步的处理。
3.8 其它内置工具
Bottle还提供许多内置工具,给予程序员在文件上传,cookies处理,HTTP元数据转化功能等方面的许多便利,具体可参考Bottle的API文档。
4性能测试
将代码存储为一个Python脚本文件,如app.py,在控制台下运行该文件,网络应用程序即完成最简单的部署。为检验网络应用程序性能,我们采用Apache Benchmark在本机上对应用进行压力测试。测试结果表明,Bottle内置单线程WEB服务器并发特性不是很好,而当部署专门的WEB服务器后,其并发响应性能有明显提升。对于数据库访问并发度高的网络应用,选用支持并发访问数据库系统如MySQL,PostgreSQL等可提高网络应用稳定性。
5结论
网络应用框架作为一种对网络应用开发的封装,在实际开发中大大提高了开发人员的开发效率。通过一个日志管理实例的实现,我们可以看到利用网络应用框架Bottle构建内容管理系统等基于数据库的网络应用十分快捷高效。实验表明,Bottle比较适合轻型网络应用开发,在进行相应扩展以后,Bottle也可具有较好的网络服务性能。
[参考文献]
[1]http://bottlepy.org/docs/dev/index.html.
[2]http://www.python.org.
[3]Magnus Lie Hetland Beginning Python:From Novice to Professional [M].USA:Apress,2008.