如何在 Ubuntu 14.04 上使用 Bottle Micro Framework 部署 Python 网络应用程序

介绍

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

虽然一些Web框架试图提供一切,但其他人试图避免,同时处理重要的,难以实现的问题。

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

前提条件

在您开始本指南之前,您将需要以下内容:

  • 一个 Ubuntu 14.04 Droplet * 如何从命令行编辑文本文件的工作知识 * 一个 sudo用户

第1步:为Python安装虚拟环境

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

我们将安装python-virtualenv包,将我们的Python项目从系统的Python环境中分离出来. virtualenv软件允许我们为我们的Python项目创建一个单独的,包含的环境,不会影响整个操作系统。

更新您的包列表:

1sudo apt-get update

从存储库中安装python-virtualenv:

1sudo apt-get install python-virtualenv

我们将在主目录中创建一个项目文件夹,然后在该文件夹中创建一个虚拟环境:

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

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

第2步:启用Python的虚拟环境

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

1source venv/bin/activate

命令提示将改变以反映我们现在在虚拟环境中运作的事实。

如果您需要稍后重新连接,请确保使用以下命令重新激活环境:

1cd ~/projects
2source venv/bin/activate

如果您需要退出虚拟环境,您可以随时输入以下内容:

1deactivate

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

美元

第3步:安装瓶子

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

此工具允许我们轻松地从 Python 包索引,一个在线存储库中安装 Python 包。

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

1pip search bottle

我们将通过安装Bottle包开始:

1pip install bottle

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

步骤4 — 创建你的第一个瓶子应用程序

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

model 是一个数据集的表示,负责存储、查询和更新数据。 view 描述了如何向用户提供信息。 它用于格式化和控制数据的呈现。

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

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

1nano ~/projects/hello.py

我们将一次向您展示每行一行,并在本节末尾包含最终文件。

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

1[label hello.py]
2from bottle import route, run

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

  • 我们正在导入的运行模块可用于在开发服务器上运行应用程序,这对于快速查看您的程序的结果是很棒的 * 我们导入的路线模块负责告诉应用程序哪些URL请求被处理Python功能。

我们现在可以添加一条路线,它将匹配URL模式 /hello. 在文件底部添加一个新行:

1[label hello.py]
2from bottle import route, run
3
4@route('/hello')

此路由器匹配 URL /hello,所以当该路径在服务器上被要求时,将执行直接随后的函数。

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

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

最后,我们需要使用开发服务器运行我们的应用程序. 添加最后一行,现在您的文件已完成:

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

此行将运行服务器实例。

  • 通过传输参数 host='0.0.0.0,这将为任何计算机提供内容,而不仅仅是本地机器。

保存并关闭文件。

我们可以使用这个命令运行此应用程序:

1python ~/projects/hello.py

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

  • http://your_server_ip:8080/你好

它将看起来像这样:

DigitalOcean Bottle hello world

您可以随时停止服务器通过键入:

1CTRL-C

步骤5:创建一个瓶子模型

我們現在已經實施了我們的第一個應用程式,它很簡單,但它並沒有實際地實施MVC原則,或做任何特別有趣的事情。

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

我们将为我们的数据库使用SQLite数据库文件,这是一个非常简单的数据库,专为轻量级任务而设计。

使用此命令安装 SQLite:

1sudo apt-get install sqlite

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

1pip install bottle-sqlite

现在我们有组件,我们将创建一个Python文件,它将生成一个SQLite数据库,其中有一些数据。

创建文件:

1nano ~/projects/picnic_data.py

将此内容添加到文件中. 它将创建一个充满野餐库存项目的数据库:

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

在这个文件中,我们:

  • 导入 SQLite 包 * 执行创建我们的表并插入数据的命令 * 最后,我们承诺更改

保存并关闭文件。

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

1python ~/projects/picnic_data.py

如果您想要,您可以ls目录来确认数据库文件已创建。

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

6 — 创建一个瓶子控制器

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

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

1nano ~/projects/picnic.py

就像以前一样,我们会将文件列线解释,并在步骤结束时显示完成的文件。

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

1[label picnic.py]
2import sqlite3
3from bottle import route, run, template

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

1[label picnic.py]
2import sqlite3
3from bottle import route, run, template
4
5@route('/picnic')

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

 1[label picnic.py]
 2import sqlite3
 3from bottle import route, run, template
 4
 5@route('/picnic')
 6def show_picnic():
 7    db = sqlite3.connect('picnic.db')
 8    c = db.cursor()
 9    c.execute("SELECT item,quant FROM picnic")
10    data = c.fetchall()
11    c.close()
12    output = template('bring_to_picnic', rows=data)
13    return output
  • 连接到数据库的命令是 db = sqlite3.connect('picnic.db') 命令 * 我们对数据库进行查询,并通过接下来的四行选择所有值 * 我们调用视图来格式化我们的数据的行是 output = template('bring_to_picnic', rows=data') 这会调用一个名为 bring_to_picnic.tpl` 的模板(视图)来格式化数据。

最后,我们需要添加我们的运行命令来运行实际服务器:

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

保存并关闭文件。

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

第7步:创建一个瓶子视图

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

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

创建一个与我们在上一个脚本中的输出行中的模板函数相匹配的文件:

1nano ~/projects/bring_to_picnic.tpl

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

 1[label bring_to_picnic.tpl]
 2<h1>Things to bring to our picnic</h1>
 3
 4<table>
 5    <tbody>
 6        <tr><th>Item</th><th>Quantity</th></tr>
 7        %for row in rows:
 8        <tr>
 9        %for col in row:
10            <td>{{col}}</td>
11        %end
12        </tr>
13    %end
14    <tbody>
15</table>

这将使我们的页面在HTML中。

  • 我们在这里看到的模板语言基本上是Python * 我们传给模板的变量可用于设计输出 * 我们可以打字Python的行,以%为前方 * 我们可以使用{var}}语法访问HTML中的变量。

保存并关闭文件。

步骤8 - 启动瓶装应用程序

我们的应用程序现在已经完成。

我们可以通过在主文件上调用Python来启动程序:

1python ~/projects/picnic.py

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

  • http://your_server_ip:8080/公寓

你的网页应该是这样的:

DigitalOcean Bottle mvc example

按)。

(可选)步骤9 — 上传您的应用程序

要上传自己的 Bottle 应用程序,您将要将所有项目文件复制到此目录:

1~/projects/

例如:

1scp myproject.py sammy@your_server_ip:~/projects/

将所有与此项目相关的文件上传以类似的方式。 SFTP是上传文件的另一种方式,如果你不熟悉scp

(可选)步骤10 - 启动自己的应用程序

激活您的虚拟环境(如果您尚未这样做)。

1cd ~/projects/
2source venv/bin/activate

我们将使用python命令启动应用程序,通过在背景中启动过程,使其稍微不那么原始,这意味着您可以关闭终端,应用程序将继续运行:

1nohup python ~/projects/myproject.py &

在输出中,您应该看到您的进程 ID 号码和以下消息:

1[label Output]
2[1] 20301
3(venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’

一旦你准备好生产,我们强烈建议为你的应用程序制定一个更强大的启动计划(仅仅在后台启动意味着你的应用程序会在服务器重新启动后停止)。

结论

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

Bottle的插件系统也是一个重要的资产. 插件在社区中积极共享,通过插件系统很容易实现更复杂的行为。

例如,找到兼容Bottle的插件的一个简单的方法是使用pip search bottle命令,这将为您提供一些更受欢迎的选项。

Published At
Categories with 技术
comments powered by Disqus