介绍
由于其灵活性和高级功能,Python是一种用于Web编程的出色语言。 Web框架可以使编程Web应用程序更简单,因为它们连接了稳健的Web界面所需的许多组件。 虽然有些Web框架试图提供用户可能要用于开发应用程序的一切,其他人尽量留出的方式,而采取的重要,很难照顾到实施的问题。 Bottle是一个Python框架,落入第二类别。它是非常轻量级,但使其很容易快速开发应用程序。 在本指南中,我们将介绍如何设置和使用Bottle在Ubuntu 12.04服务器上创建简单的Web应用程序。如何安装Bottle
Python是Bottle的编程语言,默认安装在Ubuntu上。安装和激活虚拟环境
我们将安装virtualenv
包分离我们从系统的Python环境Python项目。 我们可以从存储库轻松安装:
sudo apt-get update
sudo apt-get install python-virtualenv
virtualenv软件允许我们为我们的Python项目创建一个单独的,封闭的环境,这不会影响整个操作系统。我们将在主目录中创建一个项目文件夹,然后在此文件夹中创建一个虚拟环境:
mkdir ~/projects
cd ~/projects
virtualenv --no-site-packages venv
这将创建一个名为
venv
项目目录中。它已经在此文件夹中安装了一些Python实用程序,并创建了一个目录结构来安装其他工具。 我们必须在开始处理我们的项目之前激活虚拟环境:
source venv/bin/activate
命令提示符将改变,以反映我们现在在虚拟环境中操作的事实。如果您需要退出虚拟环境,可以随时键入:
deactivate
此时不要停用虚拟环境。
安装Bottle
其中一个安装了该程序的virtualenv的工具是pip
。 此工具允许我们从Python包索引(一个在线存储库)轻松安装Python包。 如果我们要搜索与Bottle相关的Python包,我们可以运行:
pip search bottle
我们将从安装Bottle包开始:
pip install bottle
过程完成后,我们应该能够在我们的应用程序中使用Bottle框架。
创建您的第一 Flask应用程序
Bottle,像大多数框架一样,实现一个版本的MVC软件模式。 MVC代表模型,视图和控制器,它描述了分离用户界面的不同功能的决定。 该模型是一组数据的表示,并负责存储,查询和更新数据。该视图描述了应如何向用户呈现信息。它用于格式化和控制数据的呈现。控制器是应用程序的主要处理中心,它决定如何响应用户请求。 Bottle应用可以非常简单。在他们最裸露的形式下,他们可以在一个文件中实现所有这些组件。我们将创建一个“hello world”应用程序来显示这是如何完成的。 有了您的编辑器创建一个Python应用程序名为hello.py
:
nano hello.py
在这个文件中,我们将首先从Bottle包导入一些功能。这将允许我们在我们的应用程序中使用框架工具:
from bottle import route, run
这一行告诉我们的程序,我们要导入路径并从Bottle包运行模块。 我们正在导入的运行模块可用于在开发服务器中运行应用程序,这对于快速查看程序的结果非常有用。 我们正在导入的路由模块负责告诉应用程序哪些URL请求由哪些Python函数处理。 Flask应用程序通过为每个请求的URL调用单个Python函数来实现路由。然后将该函数的结果返回给用户。 我们可以添加一条路由现在将匹配的URL拍打
/hello
:
from bottle import route, run
@route('/hello')
这条路线的装饰URL匹配
/hello
当请求在服务器上的路径。当以下匹配时,将执行直接跟随的函数:
from bottle import route, run
@route('/hello')
def hello():
return "<h1>Hello World!</h1>"
这个功能很简单,但它完成了路由功能的唯一要求:它返回一个可以在Web浏览器中显示的值。在这种情况下,该值是一个简单的HTML字符串。我们可以删除h1标题标签,相同的信息将以未装饰的方式显示。 最后,我们需要使用开发服务器运行我们的应用程序:
from bottle import route, run
@route('/hello')
def hello():
return "<h1>Hello World!</h1>"
run(host='0.0.0.0', port=8080)
此行将运行服务器实例。通过将参数
host='0.0.0.0'
这将服务内容的任何计算机上,不只是在本地机器。这是非常重要的,因为我们的应用程序是远程托管的。 port参数指定将使用的端口。 保存并关闭文件。 我们可以通过输入以下命令来运行此应用程序:
python hello.py
您可以通过访问您的IP地址访问此应用程序,其次是我们选择运行的端口(8080),然后是我们创建的路由(/ hello):
http://your_ip:8080/hello您可以随时在终端窗口中键入“CTRL-C”停止服务器。
实现MVC设计范例
我们现在已经实现了我们的第一个应用程序。这当然很简单,但它并没有真正实现MVC原则,或做任何特别有趣。让我们这次尝试做一个更复杂的应用程序。创建模型
让我们从我们的模型开始。这是我们程序中处理数据存储的部分。Bottle可以通过使用插件轻松实现各种后端数据。 我们将为我们的数据库使用一个SQLite数据库文件。这是一个非常简单的数据库,设计用于轻量级任务,我们的应用程序可以实现。 在Ubuntu中安装SQLite软件,以确保我们有可用于创建这些数据库并与之交互的软件:sudo apt-get install sqlite
我们还需要下载并安装Bottle插件,这将允许我们使用这些数据库:
pip install bottle-sqlite
现在我们有了组件,我们可以创建一个简单的数据库,我们可以存储我们的数据。我们将创建一个Python文件,当我们运行脚本时,将生成一个SQLite数据库与一些数据。我们可以在Python解释器中这样做,但是这种方式使得它很容易重复。
nano picnic_data.py
这里,我们导入SQLite包。然后,我们可以执行一个创建我们的表和在我们的表中插入数据的命令。最后,我们提交更改:
import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
db.commit()
保存并关闭文件。 我们可以执行该文件,这将创建一个名为数据库文件
picnic.db
我们当前的目录中:
python picnic_data.py
我们的程序的模型部分现在相当完整。我们可以看到,我们的模型将决定我们的控制部分必须如何与我们的数据进行交互。
创建控制器
现在我们已经创建了一个数据库,我们可以开始开发我们的主要应用程序。这将主要实现我们的控制器功能。它也将是最接近类似于我们的第一个应用程序的文件。 创建一个名为picnic.py
来存储的主要应用:
nano picnic.py
在这个文件中,我们需要从Bottle包导入一些东西,就像以前一样。我们需要一些我们以前没有使用的附加模块。另外,我们需要导入SQLite的功能:
import sqlite3
from bottle import route, run, template
接下来,我们将定义的URL路径匹配的路由
/picnic
:
import sqlite3
from bottle import route, run, template
@route('/picnic')
我们将实现连接到我们的数据库的函数,从表中获取数据,并调用我们的“视图”来渲染页面。最后,它返回到我们的用户的格式化输出。
import sqlite3
from bottle import route, run, template
@route('/picnic')
def show_picnic():
db = sqlite3.connect('picnic.db')
c = db.cursor()
c.execute("SELECT item,quant FROM picnic")
data = c.fetchall()
c.close()
output = template('bring_to_picnic', rows=data)
return output
最后,我们需要运行我们的run命令来运行实际的服务器:
import sqlite3
from bottle import route, run, template
@route('/picnic')
def show_picnic():
db = sqlite3.connect('picnic.db')
c = db.cursor()
c.execute("SELECT item,quant FROM picnic")
data = c.fetchall()
c.close()
output = template('bring_to_picnic', rows=data)
return output
run(host='0.0.0.0', port=8080)
保存并关闭文件。 我们与连接到数据库
db = sqlite3.connect('picnic.db')
命令。我们查询数据库,并选择所有的值,接下来的四行。 这里我们所说的“视图”格式化我们的数据线是
output = template('bring_to_picnic', rows=data)
。 这需要一个名为
带来 picnic.tpl对数据进行格式化模板(视图)。它将“data”变量作为模板变量“rows”传递。 我们将在下一节中创建此模板文件。
创建视图
现在我们有了我们的模型和控制器,剩下创建的唯一的是我们的视图。这使用Bottle的内置模板引擎很容易处理。 应用程序将搜索匹配的模板函数的名称是一个模板,结尾.tpl
。这可以在项目的主目录中,也可以在名为“view”的目录中。 创建一个与模板函数匹配的文件:
nano bring_to_picnic.tpl
在这个文件中,我们可以混合HTML和编程。我们的会很简单。它将使用循环来创建一个表,我们将使用我们的模型数据填充:
<h1>Things to bring to our picnic</h1>
<table>
<tr><th>Item</th><th>Quantity</th></tr>
%for row in rows:
<tr>
%for col in row:
<td>{{col}}</td>
%end
</tr>
%end
</table>
这将以HTML呈现我们的网页。我们在这里看到的模板语言基本上是Python。我们传递给模板的“rows”变量可在设计输出时使用。 我们可以通过在它们前面加上“%”来键入Python的行。我们可以使用“{{var}}”语法访问HTML中的变量。 保存并关闭文件。
查看结果
我们的应用程序现在完成了,我们可以通过在主文件中调用Python来启动程序:python picnic.py
我们可以通过访问我们的IP地址和端口以及我们创建的URL路由来查看结果:
http://your_ip:8080/picnic
结论
现在,您应该能够看到如何使用一个简单的,基本的微框架(如Bottle)构建复杂的应用程序。虽然我们的例子很简单,但很容易利用更高级的功能。 Bottle的插件系统也是一个重要的资产。在社区中积极地共享插件,并且通过插件系统实现更复杂的行为很容易。一个简单的方法来找到插件是使用pip search bottle
命令。这将给你一些更流行的选项的想法。
作者:Justin Ellingwood