状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
介绍
由于其灵活性和高级功能,Python 是一种出色的 Web 编程语言。 Web 框架可以使 Web 应用程序的编程变得更加简单,因为它们连接了强大的 Web 界面所需的许多组件。
虽然一些 Web 框架试图提供用户可能想要用来开发应用程序的所有内容,但其他 Web 框架试图在处理重要的、难以实现的问题时不碍事。 Bottle是属于第二类的Python框架。 它非常轻巧,但可以很容易地快速开发应用程序。
在本指南中,我们将介绍如何设置和使用 Bottle 在 Ubuntu 12.04 服务器上创建简单的 Web 应用程序。
如何安装瓶子
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
此时不要停用您的虚拟环境。
安装瓶子
virtualenv 程序安装的工具之一是 pip
。
这个工具使我们能够轻松地从 Python 包索引(一个在线存储库)安装 Python 包。
如果我们想搜索与 Bottle 相关的 Python 包,我们可以运行:
pip search bottle
我们将从安装 Bottle 包开始:
pip install bottle
该过程完成后,我们应该能够在我们的应用程序中使用 Bottle 框架。
创建您的第一个瓶子应用程序
像大多数框架一样,Bottle 实现了 MVC 软件模式的一个版本。 MVC 代表模型、视图和控制器,它描述了分离用户界面不同功能的决定。
模型是一组数据的表示,负责存储、查询和更新数据。 该视图描述了信息应该如何呈现给用户。 它用于格式化和控制数据的显示。 控制器是应用程序的主要处理中心,它决定如何响应用户请求。
瓶子应用程序可以非常简单。 以最简单的形式,他们可以在一个文件中实现所有这些组件。 我们将创建一个“hello world”应用程序来展示这是如何完成的。
使用您的编辑器,创建一个名为 hello.py
的 Python 应用程序:
nano hello.py
在这个文件中,我们将首先从 Bottle 包中导入一些功能。 这将允许我们在应用程序中使用框架工具:
from bottle import route, run
这一行告诉我们的程序我们要从 Bottle 包中导入路由和运行模块。
我们正在导入的运行模块可用于在开发服务器中运行应用程序,这对于快速查看程序的结果非常有用。
我们正在导入的路由模块负责告诉应用程序哪些 URL 请求由哪些 Python 函数处理。 Bottle 应用程序通过为每个请求的 URL 调用单个 Python 函数来实现路由。 然后它将函数的结果返回给用户。
我们现在可以添加一个匹配 URL 模式 /hello
的路由:
from bottle import route, run @route('/hello')
当服务器上请求该路径时,此路由装饰器与 URL /hello
匹配。 当 this 匹配时,将执行直接跟随的函数:
from bottle import route, run @route('/hello') def hello(): return "<h1>Hello World!</h1>"
这个函数非常简单,但它完成了路由函数的唯一要求:它返回一个可以在网络浏览器中显示的值。 在这种情况下,该值是一个简单的 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
您可以在 Web 浏览器中访问此应用程序,方法是转到您的 IP 地址,然后是我们选择运行的端口 (8080),然后是我们创建的路由 (/hello):
http:// your_ip :8080/你好
您可以随时通过在终端窗口中键入“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
最后,我们需要输入我们的运行命令来运行实际的服务器:
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)
。 这会调用一个名为 bring_to_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
命令。 这将使您了解一些更受欢迎的选项。