如何使用 Bottle Micro 框架开发 Python Web 应用程序

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参见:** 此指南可能仍然作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。


Python 是网页编程的优秀语言,因为其灵活性和高层次的功能性,网页框架可以使编程网页应用程序变得更简单,因为它们连接了强大的网页接口所需的许多组件。

虽然一些Web框架试图提供用户可能想要用来开发应用程序的一切,但其他人则试图避免,同时照顾重要的,难以实现的问题 Bottle是一个属于第二类的Python框架。

在本指南中,我们将介绍如何设置和使用Bottle在Ubuntu 12.04服务器上创建简单的Web应用程序。

如何安装瓶子


Python 是 Bottle 开发的编程语言,默认情况下安装在 Ubuntu 上。

安装和激活虚拟环境

我们将安装virtualenv包,将我们的Python项目从系统的Python环境中分离出来。

我们可以从存储库中轻松安装:

1sudo apt-get update
2sudo apt-get install python-virtualenv

virtualenv 软件允许我们为我们的 Python 项目创建一个单独的,包含的环境,不会影响整个操作系统. 我们将在我们的主目录中创建一个项目文件夹,然后在该文件夹中创建一个虚拟环境:

1mkdir ~/projects
2cd ~/projects
3virtualenv --no-site-packages venv

这在项目目录中创建了一个名为venv的目录,它在这个文件夹中安装了一些Python实用程序,并创建了一个目录结构来安装额外的工具。

我们必须在开始工作之前激活虚拟环境:

1source venv/bin/activate

命令提示将更改以反映我们现在在虚拟环境中运作的事实. 如果您需要退出虚拟环境,您可以随时输入以下内容:

1deactivate

此时不要关闭您的虚拟环境。

安装瓶子


virtualenv 程序安装的工具之一是pip

该工具允许我们轻松地从Python包索引中安装Python包。

如果我们想搜索与 Bottle 相关的 Python 包,我们可以运行:

1pip search bottle

我们将从安装Bottle包开始:

1pip install bottle

在该过程完成后,我们应该能够在我们的应用程序中使用Bottle框架。

创建你的第一个瓶子应用程序


与大多数框架一样,Bottle 实现了 MVC 软件模式的版本,MVC 代表模型、视图和控制器,它描述了分离用户界面的不同功能的决定。

模型是数据集的表示,负责存储、查询和更新数据. 视图描述了如何向用户渲染信息。 它用于格式化和控制数据的呈现。

瓶子应用程序可以非常简单,以最纯粹的形式,它们可以在单个文件中实现所有这些组件,我们将创建一个你好世界应用程序来展示如何做到这一点。

使用您的编辑器,创建一个名为hello.py的Python应用程序:

1nano hello.py

在此文件中,我们将首先从Bottle包中导入一些功能,这将使我们能够在我们的应用程序中使用框架工具:

1from bottle import route, run

这个行告诉我们的程序,我们想要从瓶子包中导入路线和运行模块。

我们正在导入的运行模块可以用来在开发服务器上运行应用程序,这对于快速查看程序的结果是很好的。

我们正在导入的路由模块负责告诉应用程序哪些URL请求被处理的Python功能。Bottle应用程序通过呼叫每个请求的URL单个Python函数来实现路由。

我们现在可以添加一个路线,它将匹配URL模式 /hello:

1from bottle import route, run
2
3@route('/hello')

此路由器在服务器上请求该路径时匹配 URL `/hello。

1from bottle import route, run
2
3@route('/hello')
4def hello():
5    return "<h1>Hello World!</h1>"

这个函数非常简单,但它完成了路由函数的唯一要求:它返回了可以在网页浏览器中显示的值. 在这种情况下,值是一个简单的HTML字符串。

最后,我们需要使用开发服务器运行我们的应用程序:

1from bottle import route, run
2
3@route('/hello')
4def hello():
5    return "<h1>Hello World!</h1>"
6
7run(host='0.0.0.0', port=8080)

通过传输参数 host='0.0.0.0,这将为任何计算机提供内容,而不仅仅是本地机器。这很重要,因为我们的应用程序正在远程托管。

保存并关闭文件。

我们可以通过输入这个来运行此应用程序:

1python hello.py

您可以在您的 Web 浏览器中访问此应用程序,通过访问您的 IP 地址,然后是我们选择运行的端口(8080),然后是我们创建的路线(/hello):

http://your_ip:8080/hello

DigitalOcean Bottle hello world

您可以随时停止服务器,在终端窗口中键入CTRL-C

实施MVC设计范式


我們現在已經實施了我們的第一個應用程式,當然很簡單,但它並不真正實施MVC原則,或做任何特別有趣的事情,讓我們試著做一個更複雜的應用程式。

创建模型


让我们从我们的模型开始,这是我们程序处理数据存储的部分,Bottle可以通过使用插件轻松地实现各种数据的后端。

我们将为我们的数据库使用SQLite数据库文件,这是一个非常简单的数据库,用于我们的应用程序可以实现的轻量级任务。

在 Ubuntu 中安装 SQLite 软件,以确保我们有可用软件来创建和与这些数据库进行交互:

1sudo apt-get install sqlite

我们还需要下载并安装Bottle插件,这将使我们能够使用这些数据库:

1pip install bottle-sqlite

现在我们有组件,我们可以创建一个简单的数据库,我们可以存储我们的数据,我们将创建一个Python文件,当我们运行脚本时将生成一个SQLite数据库,其中有一些数据。

1nano picnic_data.py

在这里,我们导入 SQLite 包. 然后,我们可以执行一个命令来创建我们的表并将数据插入我们的表。

1import sqlite3
2db = sqlite3.connect('picnic.db')
3db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
4db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
5db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
6db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
7db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
8db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
9db.commit()

保存并关闭文件。

我们可以执行该文件,它将在我们当前目录中创建一个名为picnic.db的数据库文件:

1python picnic_data.py

我们的模型部分现在相当完整,我们可以看到我们的模型会稍微决定我们的控制部分必须如何运作以与我们的数据进行交互。

创建控制器


现在我们已经创建了一个数据库,我们可以开始开发我们的主要应用程序. 这将主要实现我们的控制器功能. 它也将是最接近我们的第一个应用程序的文件。

创建一个名为picnic.py的文件来存储我们的主要应用程序:

1nano picnic.py

在此文件中,我们需要从Bottle包中导入一些东西,就像以前一样。我们需要一些我们以前没有使用过的额外模块。

1import sqlite3
2from bottle import route, run, template

接下来,我们将定义一个匹配 URL 路径 / 野餐 的路径:

1import sqlite3
2from bottle import route, run, template
3
4@route('/picnic')

我们将实现连接到我们的数据库的功能,从表中获取我们的数据,并调用我们的视图来渲染页面。

 1import sqlite3
 2from bottle import route, run, template
 3
 4@route('/picnic')
 5def show_picnic():
 6    db = sqlite3.connect('picnic.db')
 7    c = db.cursor()
 8    c.execute("SELECT item,quant FROM picnic")
 9    data = c.fetchall()
10    c.close()
11    output = template('bring_to_picnic', rows=data)
12    return output

最后,我们需要将我们的运行命令放到实际服务器上:

 1import sqlite3
 2from bottle import route, run, template
 3
 4@route('/picnic')
 5def show_picnic():
 6    db = sqlite3.connect('picnic.db')
 7    c = db.cursor()
 8    c.execute("SELECT item,quant FROM picnic")
 9    data = c.fetchall()
10    c.close()
11    output = template('bring_to_picnic', rows=data)
12    return output
13
14run(host='0.0.0.0', port=8080)

保存并关闭文件。

我们使用db = sqlite3.connect(picnic.db)`命令连接到数据库,我们查询数据库,并用下面的四行选择我们的所有值。

我们调用视图来格式化我们的数据的行是 output = template('bring_to_picnic', rows=data). 这会调用一个名为 bring_to_picnic.tpl 的模板(视图)来格式化数据。

我们将在下一节中创建这个模板文件。

创建观点


现在我们有我们的模型和控制器,唯一需要创建的是我们的视图,这可以很容易地使用Bottle的内置模板引擎来处理。

该应用程序将搜索匹配模板函数中给定的名称的模板,结尾为 .tpl. 这可以是在项目的主目录中,或在名为视图`的目录中。

创建一个与我们称之为模板函数相匹配的文件:

1nano bring_to_picnic.tpl

在这个文件中,我们可以混合HTML和编程。我们的将非常简单。它将使用循环创建一个表,我们将填充我们的模型数据:

 1<h1>Things to bring to our picnic</h1>
 2<table>
 3<tr><th>Item</th><th>Quantity</th></tr>
 4%for row in rows:
 5    <tr>
 6    %for col in row:
 7        <td>{{col}}</td>
 8    %end
 9    </tr>
10%end
11</table>

这将使我们的页面在HTML中。我们在这里看到的模板语言基本上是Python。我们传递给模板的变量可用于设计输出。

我们可以用%来打字Python的行,我们可以使用{var}}语法访问HTML中的变量。

保存并关闭文件。

观看结果


我们的应用程序现在已经完成,我们可以通过在主文件上调用Python来启动程序:

1python picnic.py

我们可以通过访问我们的 IP 地址和端口,然后看到我们创建的 URL 路线来查看结果:

http://your_ip:8080/picnic

DigitalOcean Bottle mvc example

结论


到目前为止,您应该能够看到如何使用像 Bottle 这样的简单、无骨微框架来构建复杂的应用程序,虽然我们的示例很简单,但很容易利用更先进的功能。

Bottle的插件系统也是一个重要的资产. 插件在社区中积极共享,通过插件系统实现更复杂的行为很容易。 找到插件的一个简单的方法是使用试管搜索瓶命令。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus