如何在Ubuntu14.04上使用BottleMicro框架部署PythonWeb应用程序
介绍
由于其灵活性和高级功能,Python 是一种出色的 Web 编程语言。 Web 框架可以使 Web 应用程序的编程变得更加简单,因为它们连接了强大的 Web 界面所需的许多组件。
一些 Web 框架试图提供一切,而另一些则试图在处理重要的、难以实现的问题时不碍事。 Bottle是属于第二类的Python框架。 它非常轻巧,但也可以轻松快速地开发应用程序。
在本指南中,我们将介绍如何设置和使用 Bottle 在 Ubuntu 14.04 服务器上创建简单的 Web 应用程序。
先决条件
在开始本指南之前,您需要以下内容:
- 一个 Ubuntu 14.04 Droplet
- 关于如何从命令行编辑文本文件的实用知识
- 一个 sudo 用户
第 1 步 — 为 Python 安装虚拟环境
Python 是为 Bottle 构建的编程语言,默认安装在 Ubuntu 上。
我们将安装 python-virtualenv
包以将我们的 Python 项目与系统的 Python 环境隔离。 virtualenv 软件允许我们为我们的 Python 项目创建一个独立的、包含的环境,不会影响整个操作系统。
更新您的包裹清单:
sudo apt-get update
从存储库安装 python-virtualenv
:
sudo apt-get install python-virtualenv
我们将在我们的主目录中创建一个 projects
文件夹,然后在此文件夹中创建一个虚拟环境:
mkdir ~/projects cd ~/projects virtualenv --no-site-packages venv
这将在 projects
目录中创建一个名为 venv
的目录。 它在此文件夹中安装了一些 Python 实用程序,并创建了一个目录结构来安装其他工具。
第 2 步 — 激活 Python 的虚拟环境
在开始我们的项目之前,我们必须激活虚拟环境:
source venv/bin/activate
命令提示符将更改以反映我们现在在虚拟环境中操作的事实。
如果您需要稍后重新连接,请确保使用以下命令再次激活环境:
cd ~/projects source venv/bin/activate
如果您需要退出虚拟环境,您可以随时键入:
deactivate
此时不要停用您的虚拟环境。
第 3 步 — 安装瓶子
virtualenv 程序安装的工具之一是 pip
。
这个工具允许我们从在线存储库 Python 包索引 轻松安装 Python 包。
如果我们想搜索与 Bottle 相关的 Python 包,我们可以运行:
pip search bottle
我们将从安装 Bottle 包开始:
pip install bottle
该过程完成后,我们应该能够在我们的应用程序中使用 Bottle 框架。
第 4 步 — 创建您的第一个瓶子应用程序
像大多数框架一样,Bottle 实现了 MVC 软件模式的一个版本。 MVC 代表模型、视图和控制器,它描述了分离用户界面不同功能的决定。
模型是一组数据的表示,负责存储、查询和更新数据。 视图 描述了信息应该如何呈现给用户。 它用于格式化和控制数据的显示。 控制器是应用程序的主要处理中心,决定如何响应用户请求。
瓶子应用程序可以非常简单。 以最简单的形式,他们可以在一个文件中实现所有这些组件。 我们将创建一个“hello world”应用程序来展示这是如何完成的。
使用您最喜欢的文本编辑器,创建一个名为 hello.py
的 Python 应用程序:
nano ~/projects/hello.py
我们将一次向您展示每一行,并在本节末尾包含最终文件。
在这个文件中,第一行我们将添加从 Bottle 包中导入的一些功能。 这将允许我们在应用程序中使用框架工具:
你好.py
from bottle import route, run
这一行告诉我们的程序我们要从 Bottle 包中导入路由和运行模块。
- 我们正在导入的
run
模块可用于在开发服务器上运行应用程序,这对于快速查看程序的结果非常有用 - 我们正在导入的
route
模块负责告诉应用程序哪些 URL 请求由哪些 Python 函数处理。 Bottle 应用程序通过为每个请求的 URL 调用单个 Python 函数来实现路由。 然后它将函数的结果返回给用户
我们现在可以添加一个匹配 URL 模式 /hello
的路由。 在文件底部添加一个新行:
你好.py
from bottle import route, run @route('/hello')
该路由装饰器匹配 URL /hello
,因此当服务器请求该路径时,将执行直接跟随的函数。 在文件末尾再添加两行:
你好.py
from bottle import route, run @route('/hello') def hello(): return "<h1>Hello World!</h1>"
这个函数非常简单,但它完成了路由函数的唯一要求:它返回一个可以在网络浏览器中显示的值。 在这种情况下,该值是一个简单的 HTML 字符串。 我们可以删除 h1 标头标签,相同的信息将以未装饰的方式显示。
最后,我们需要使用开发服务器运行我们的应用程序。 添加最后一行,现在您的文件已完成:
你好.py
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 ~/projects/hello.py
您可以在 Web 浏览器中访问此应用程序,方法是转到您的 IP 地址,然后是我们选择运行的端口 (8080),然后是我们创建的路由 (/hello):
它看起来像这样:
您可以随时通过键入以下内容来停止服务器:
CTRL-C
第 5 步 — 创建瓶子模型
我们现在已经实现了我们的第一个应用程序。 它很简单,但并没有真正实现 MVC 原则,或者做任何特别有趣的事情。 这次让我们创建一个稍微复杂一点的应用程序。
我们将从我们的模型开始。 这是我们程序中处理数据存储的部分。 Bottle 可以通过使用插件轻松实现各种数据后端。
我们将为我们的数据库使用 SQLite 数据库文件。 这是一个为轻量级任务设计的极其简单的数据库。
使用以下命令安装 SQLite:
sudo apt-get install sqlite
我们还需要下载并安装可以使用这些数据库的 Bottle 插件:
pip install bottle-sqlite
现在我们有了组件,我们将创建一个 Python 文件,该文件将生成一个包含一些数据的 SQLite 数据库。 我们可以在 Python 解释器中执行此操作,但是制作一个文件很容易重复。
创建文件:
nano ~/projects/picnic_data.py
将此内容添加到文件中。 它将创建一个充满野餐清单项目的数据库:
野餐数据.py
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()
在这个文件中,我们:
- 导入 SQLite 包
- 执行一个创建我们的表并插入数据的命令
- 最后,我们提交更改
保存并关闭文件。
执行该文件,这将在我们当前目录中创建一个名为 picnic.db
的数据库文件:
python ~/projects/picnic_data.py
如果您愿意,您可以 ls
目录来确认数据库文件已创建。
我们程序的模型部分现在已经相当完整了。 我们可以看到,我们的模型将稍微规定我们的控制部分必须如何与我们的数据交互。
6 — 创建一个瓶子控制器
现在我们有了一个数据库,我们可以开始开发我们的主应用程序了。 这将主要实现我们的控制器功能。 它也将是与我们的第一个应用程序最相似的文件。
创建一个名为 picnic.py
的文件来存储我们的主应用程序:
nano ~/projects/picnic.py
和之前一样,我们将逐行解释文件,并在步骤结束时显示完成的文件。
在这个文件中,我们需要像以前一样从 Bottle 包中导入一些东西。 我们需要一些以前没有使用过的附加模块。 此外,我们需要导入 SQLite 功能:
野餐.py
import sqlite3 from bottle import route, run, template
接下来,我们将定义一个匹配 URL 路径 /picnic
的路由:
野餐.py
import sqlite3 from bottle import route, run, template @route('/picnic')
我们将实现连接到数据库、从表中获取数据并调用视图来呈现页面的函数。
野餐.py
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
- 连接数据库的命令是
db = sqlite3.connect('picnic.db')
命令 - 我们查询数据库,并在接下来的四行中选择我们所有的值
- 我们调用视图来格式化数据的行是
output = template('bring_to_picnic', rows=data)
。 这会调用一个名为bring_to_picnic.tpl
的模板(视图)来格式化数据。 它将data
变量作为模板变量rows
传递 - 最后,它将格式化的输出返回给我们的用户
最后,我们需要添加我们的 run
命令来运行实际的服务器:
野餐.py
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)
保存并关闭文件。
我们将在下一节中创建此模板文件 bring_to_picnic.tpl
。
第 7 步 — 创建瓶子视图
现在我们有了模型和控制器,剩下的唯一要创建的就是我们的视图。 这可以使用 Bottle 的内置模板引擎轻松处理。
应用程序将搜索与模板函数中给出的名称匹配的模板,以 .tpl
结尾。 这可以在项目的主目录中,也可以在名为 view
的目录中。
创建一个与我们在上一个脚本的 output
行中使用模板函数调用的文件匹配的文件:
nano ~/projects/bring_to_picnic.tpl
在这个文件中,我们可以混合 HTML 和编程。 我们的将非常简单。 它将使用一个循环来创建一个表,我们将使用我们的模型数据填充该表。 将所有这些行添加到文件中:
带去野餐.tpl
<h1>Things to bring to our picnic</h1> <table> <tbody> <tr><th>Item</th><th>Quantity</th></tr> %for row in rows: <tr> %for col in row: <td>{{col}}</td> %end </tr> %end <tbody> </table>
这将以 HTML 格式呈现我们的页面。
- 我们在这里看到的模板语言基本上是 Python
- 我们传递给模板的
rows
变量可在设计输出时使用 - 我们可以在 Python 行前面加上
%
- 我们可以使用
模板:Var
语法访问 HTML 中的变量。
保存并关闭文件。
第 8 步 — 启动瓶子应用程序
我们的申请现已完成。
我们可以通过在主文件上调用 Python 来启动程序:
python ~/projects/picnic.py
我们可以通过访问我们的 IP 地址和端口来查看结果,然后是我们创建的 URL 路由:
您的网页应如下所示:
按 CTRL-C
停止应用程序。 (CTRL-Z
是更强的停止信号。)
(可选)第 9 步 — 上传您自己的应用程序
要上传您自己的 Bottle 应用程序,您需要将所有项目文件复制到此目录:
~/projects/
例如:
scp myproject.py sammy@your_server_ip:~/projects/
以类似的方式上传与该项目关联的所有文件。 SFTP 是另一种上传文件的方式,如果您不熟悉 scp
。
(可选)第 10 步 — 启动您自己的应用程序
激活您的虚拟环境(如果您还没有这样做的话)。
cd ~/projects/ source venv/bin/activate
我们将使用 python
命令来启动应用程序。 我们将通过在后台启动进程来稍微简化它,这意味着您可以关闭终端并且应用程序将继续运行:
nohup python ~/projects/myproject.py &
在输出中,您应该看到您的进程 ID 号和以下消息:
输出
[1] 20301 (venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’
一旦您准备好投入生产,我们强烈建议您为您的应用制定更强大的启动计划。 (只是在后台启动它意味着您的应用程序将在服务器重新启动后停止。)Ubuntu 14.04 使用 Upstart。
结论
到现在为止,您应该能够了解如何使用像 Bottle 这样的简单、基本的微框架来构建复杂的应用程序。 虽然我们的示例很简单,但很容易利用更高级的功能。
Bottle 的插件系统也是一项重要资产。 插件在社区内积极共享,通过插件系统很容易实现更复杂的行为。
例如,找到与 Bottle 兼容的插件的一种简单方法是使用 pip search bottle
命令。 这将使您了解一些更受欢迎的选项。