如何在Ubuntu 14.04 部署Bottle Micro Framework的Python Web应用程序

Bottle是一个Python框架。这是非常轻巧,而且还可以很容易地快速开发应用程序。 在本指南中,我们将介绍如何设置和使用Bottle到Ubuntu的14.04服务器上创建简单的Web应用程序。

介绍

由于其灵活性和高级功能,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
这将创建一个名为venv的范围内projects目录。它在此文件夹中安装了一些Python实用程序,并创建了一个目录结构来安装其他工具。

第2步 - 激活Python的虚拟环境

我们必须在开始处理我们的项目之前激活虚拟环境:
source venv/bin/activate
命令提示符将改变,以反映我们现在在虚拟环境中操作的事实。 如果以后需要重新连接,请确保使用以下命令再次激活环境:
cd ~/projects
source venv/bin/activate
如果您需要退出虚拟环境,可以随时键入:
deactivate
此时不要停用虚拟环境。

第3步 - 安装Bottle

其中一个安装了该程序的virtualenv的工具是pip 。 这个工具可以让我们轻松地从安装Python包Python包指数 ,在线存储库。 如果我们要搜索与Bottle相关的Python包,我们可以运行:
pip search bottle
我们将从安装Bottle包开始:
pip install bottle
过程完成后,我们应该能够在我们的应用程序中使用Bottle框架。

第4步 - 创建您的第一 Flask应用程序

Bottle,像大多数框架一样,实现一个版本的MVC软件模式。 MVC代表模型,视图和控制器,它描述了分离用户界面的不同功能的决定。 该模型是一组数据的表示,并负责存储,查询和更新数据。 该视图描述信息应该如何呈现给用户。 它用于格式化和控制数据的呈现。 控制器是应用程序,这决定如何响应用户请求的主要处理中心。 Bottle应用可以非常简单。在他们最裸露的形式下,他们可以在一个文件中实现所有这些组件。我们将创建一个“hello world”应用程序来显示这是如何完成的。 用你喜欢的文本编辑器创建一个Python应用程序调用hello.py
nano ~/projects/hello.py
我们将每次向您显示一行,并在本节结尾处包含最终文件。 在这个文件中,第一行,我们将从Bottle包中添加导入一些功能。这将允许我们在我们的应用程序中使用框架工具:
hello.py
from bottle import route, run
这一行告诉我们的程序,我们要导入路径并从Bottle包运行模块。
  • run ,我们导入模块,可以用来运行一个开发服务器,这是伟大的快速看到你的计划的结果上的应用
  • route是我们导入模块负责告诉哪些URL请求得到由Python函数来处理应用程序。 Flask应用程序通过为每个请求的URL调用单个Python函数来实现路由。然后它将函数的结果返回给用户
我们可以马上添加一个路径,将匹配URL模式/hello 。在文件底部添加一行:
hello.py
from bottle import route, run

@route('/hello')
这条路线装饰相匹配的URL /hello ,所以当被要求在服务器上的路径,直接跟随功能将被执行。在文件末尾添加两行:
hello.py
from bottle import route, run

@route('/hello')
def hello():
    return "<h1>Hello World!</h1>"
这个功能很简单,但它完成了路由功能的唯一要求:它返回一个可以在Web浏览器中显示的值。在这种情况下,该值是一个简单的HTML字符串。我们可以删除h1标题标签,相同的信息将以未装饰的方式显示。 最后,我们需要使用开发服务器运行我们的应用程序。添加最后一行,现在您的文件已完成:
hello.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
您可以通过访问您的IP地址访问此应用程序,其次是我们选择运行的端口(8080),然后是我们创建的路由(/ hello):
  • http:// your_server_ip :8080/hello
它将如下所示: DigitalOcean瓶你好世界 您可以随时通过键入以下命令停止服务器:
CTRL-C

第5步 - 创建Bottle模型

我们现在已经实现了我们的第一个应用程序。它很简单,但它没有真正实现MVC原则,或做任何特别有趣。让我们这次创建一个稍微更复杂的应用程序。 我们将从我们的模型开始。这是我们程序中处理数据存储的部分。Bottle可以通过使用插件轻松实现各种后端数据。 我们将为我们的数据库使用一个SQLite数据库文件。这是一个非常简单的数据库,专为轻量级任务而设计。 使用此命令安装SQLite:
sudo apt-get install sqlite
我们还需要下载并安装Bottle插件,这将允许我们使用这些数据库:
pip install bottle-sqlite
现在我们有组件,我们将创建一个Python文件,将生成一个SQLite数据库与一些数据。我们可以在Python解释器中做到这一点,但是创建一个文件可以很容易重复。 创建文件:
nano ~/projects/picnic_data.py
将此内容添加到文件。它将创建一个充满野餐库存项目的数据库:
picnic_data.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 - 创建Bottle控制器

现在我们有了一个数据库,我们可以开始开发我们的主要应用程序。这将主要实现我们的控制器功能。它也将是最接近类似于我们的第一个应用程序的文件。 创建一个名为picnic.py来存储的主要应用:
nano ~/projects/picnic.py
和以前一样,我们将逐行解释文件,并在步骤结束时显示完成的文件。 在这个文件中,我们需要从Bottle包导入一些东西,就像以前一样。我们需要一些我们以前没有使用的附加模块。另外,我们需要导入SQLite的功能:
picnic.py
import sqlite3
from bottle import route, run, template
接下来,我们将定义的URL路径匹配的路由/picnic
picnic.py
import sqlite3
from bottle import route, run, template

@route('/picnic')
我们将实现连接到我们的数据库的函数,从表中获取数据,并调用我们的视图来渲染页面。
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命令来运行实际的服务器:
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

run(host='0.0.0.0', port=8080)
保存并关闭文件。 我们将创建这个模板文件bring_to_picnic.tpl在下一节。

第7步 - 创建Bottle视图

现在我们有了我们的模型和控制器,剩下创建的唯一的是我们的视图。这使用Bottle的内置模板引擎很容易处理。 应用程序将搜索匹配的模板函数的名称是一个模板,结尾.tpl 。 这可以是该项目的主目录,或者在目录中称为view 。 创建匹配与我们的模板函数调用的一个文件output在前面的脚本行:
nano ~/projects/bring_to_picnic.tpl
在这个文件中,我们可以混合HTML和编程。我们的会很简单。它将使用一个循环来创建一个表,我们将填充我们的模型数据。将所有这些行添加到文件:
bring_to_picnic.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线路%
  • 我们可以通过使用HTML中访问变量{{var}}语法。
保存并关闭文件。

第8步 - 启动 Flask应用程序

我们的应用程序现已完成。 我们可以通过在主文件上调用Python来启动程序:
python ~/projects/picnic.py
我们可以通过访问我们的IP地址和端口,然后是我们创建的URL路由查看结果:
  • http:// your_server_ip :8080/picnic
您的网页应如下所示: 数字海洋瓶mvc示例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命令。这将给你一些更流行的选项的想法。