首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 ># 如何在Ubuntu 14.04上使用Bottle Micro Framework部署Python Web应用程序 ##

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

原创
作者头像
谢鸢
修改于 2018-09-26 09:56:27
修改于 2018-09-26 09:56:27
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

由于其灵活性和高级功能,Python是一种优秀的Web编程语言。Web框架可以使编程Web应用程序更加简单,因为它们连接了强大的Web界面所需的许多组件。

虽然一些网络框架试图提供一切,但其他人试图在处理重要的,难以实施的问题时避开障碍。Bottle是一个Python框架,属于第二类。它非常轻巧,但也可以快速开发应用程序。

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

准备

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

  • 一个Ubuntu 14.04 腾讯云CVM
  • 了解如何从命令行编辑文本文件的工作知识
  • 一个有sudo权限的用户(你需要一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)

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

Python是用于构建Bottle的编程语言,默认情况下安装在Ubuntu上。

我们将安装python-virtualenv包以将我们的Python项目与系统的Python环境隔离开来。virtualenv软件允许我们为Python项目创建一个独立的,包含的环境,不会影响整个操作系统。

更新您的包裹清单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get update

从存储库安装python-virtualenv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install python-virtualenv

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir ~/projects
cd ~/projects
virtualenv --no-site-packages venv

这将创建一个在目录中调用venvprojects目录。它在此文件夹中安装了一些Python实用程序,并创建了一个目录结构来安装其他工具。

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

在开始处理我们的项目之前,我们必须激活虚拟环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source venv/bin/activate

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/projects
source venv/bin/activate

如果需要退出虚拟环境,可以随时键入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deactivate

此时不要停用您的虚拟环境。

第3步 - 安装瓶子

virtualenv程序安装的工具之一pip

这个工具允许我们从Python包索引(一个在线存储库)轻松安装Python包。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip search bottle

我们将从安装Bottle包开始:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install bottle

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

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

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

模型是一组数据的表示,负责存储,查询和更新数据。该视图描述了如何向用户呈现信息。它用于格式化和控制数据的表示。该控制器是应用程序,它决定如何响应用户的请求的主处理中心。

瓶子应用程序非常简单。在最简单的形式中,他们可以在单个文件中实现所有这些组件。我们将创建一个“hello world”应用程序来展示如何完成。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nano ~/projects/hello.py

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bottle import route, run

这一行告诉我们的程序我们要导入路径并从Bottle包中运行模块。

  • run我们导入的模块可用于在开发服务器上运行应用程序,这对于快速查看程序结果非常有用
  • route我们导入的模块负责告诉应用程序由哪些Python函数处理哪些URL请求。Bottle应用程序通过为每个请求的URL调用单个Python函数来实现路由。然后它将函数的结果返回给用户

我们现在可以添加一个与URL模式/hello匹配的路由。在文件底部添加一个新行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bottle import route, run
​
@route('/hello')

此路径装饰器匹配URL /hello,因此在服务器上请求该路径时,将执行直接跟随的功能。在文件末尾再添加两行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from bottle import route, run
​
@route('/hello')
def hello():
    return "<h1>Hello World!</h1>"

此函数非常简单,但它完成了路由功能的唯一要求:它返回一个可以在Web浏览器中显示的值。在这种情况下,该值是一个简单的HTML字符串。我们可以删除h1标头标签,相同的信息将以未修饰的方式显示。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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参数指定将使用的端口

保存并关闭文件。

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python ~/projects/hello.py

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

  • http://your_server_ip:8080/hello

它看起来像这样:

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CTRL-C

第5步 - 创建瓶子模型

我们现在已经实施了第一个应用程序 这很简单,但它并没有真正实现MVC原则,或做任何特别有趣的事情。让我们这次创建一个稍微复杂的应用程序。

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

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

使用以下命令安装SQLite:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt-get install sqlite

我们还需要下载并安装允许我们使用这些数据库的Bottle插件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install bottle-sqlite

现在我们有了组件,我们将创建一个Python文件,该文件将生成带有一些数据的SQLite数据库。我们可以在Python解释器中执行此操作,但创建文件可以轻松重复。

创建文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nano ~/projects/picnic_data.py

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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在当前目录中调用的数据库文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python ~/projects/picnic_data.py

如果您愿意,可以用ls在目录中确认是否已创建数据库文件。

我们程序的模型部分现在相当完整。我们可以看到,我们的模型将稍微说明我们的控制部分必须如何与我们的数据交互。

6 - 创建瓶控制器

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nano ~/projects/picnic.py

和以前一样,我们将逐行解释文件,并在步骤结束时显示已完成的文件。

在这个文件中,我们需要从Bottle包中导入一些东西,就像之前一样。我们需要一些以前没有使用的附加模块。另外,我们需要导入SQLite功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sqlite3
from bottle import route, run, template

接下来,我们将定义与URL路径匹配的路由/picnic

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sqlite3
from bottle import route, run, template
​
@route('/picnic')

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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命令来运行实际的服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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行中的模板函数创建一个与我们调用的文件匹配的文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nano ~/projects/bring_to_picnic.tpl

在这个文件中,我们可以混合使用HTML和编程。我们会很简单。它将使用循环来创建一个表,我们将使用我们的模型数据填充该表。将所有这些行添加到文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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来启动程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python ~/projects/picnic.py

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

  • http://your_server_ip:8080/picnic

您的网页应如下所示:

CTRL-C停止应用程序。(CTRL-Z是一个更强的停止信号。)

(可选)步骤9 - 上传您自己的应用程序

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~/projects/

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scp myproject.py sammy@your_server_ip:~/projects/

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

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

激活您的虚拟环境(如果您还没有这样做)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/projects/
source venv/bin/activate

我们将使用该python命令启动应用程序。我们将通过在后台启动该过程使其稍微不那么简陋,这意味着您可以关闭终端并且应用程序将继续运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup python ~/projects/myproject.py &

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1] 20301
(venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’

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

结论

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

Bottle的插件系统也是一项重要的资产。插件在社区中被主动共享,并且通过插件系统很容易实现更复杂的行为。

例如,找到与Bottle兼容的插件的一种简单方法是使用该pip search bottle命令。这将让您了解一些更受欢迎的选项。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Deploy Python Web Applications with the Bottle Micro Framework on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python一些类库的基本操作
Xwlt import xlwt workbook = xlwt.Workbook(encoding='utf-8') worksheet = workbook.add_sheet('sheet1') worksheet.write(0,0,'hello') workbook.save('student.xls') Sqlite import sqlite3 conn = sqlite3.connect('test.db') c = conn.cursor() sql = ''' insert
shaoshaossm
2022/12/26
3770
Python一些类库的基本操作
如何在Ubuntu 16.04上使用Gunicorn和Nginx部署Falcon Web应用程序
Falcon是用于构建Web应用程序的最小Python框架。它非常适合构建遵循REST架构风格的API 。它是一个低级别,高性能的框架,可以在不牺牲开发速度的情况下尽可能少地执行。
姚啊姚
2018/09/26
2K0
如何在Ubuntu 14.04上使用MySQL或MariaDB和Django应用程序
Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
苏子晨
2018/10/22
2K0
如何在Ubuntu 16.04上使用PostgreSQL和Django应用程序
Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
水门
2018/10/25
2.5K0
python使用上下文管理器实现sqlite3事务机制
如题,本文记录如何使用python上下文管理器的方式管理sqlite3的句柄创建和释放以及事务机制。 1、python上下文管理(with) python上下文管理(context),解决的是这样一类问题,在进入逻辑之前需要进行一些准备工作,在退出逻辑之前需要进行一些善后工作,上下文管理可以使得这种场景变得清晰和可控。 with语句是python上下文管理的基本用法,例如读写文件 with open('filea', r) as f: f.readlines() file使用的就是上下文管理机制,这
用户1225216
2018/03/05
2.9K1
Web前端性能测试平台开发(Flask)
开篇先打个小广告,在《牛刀小试-LR性能测试》那篇小文中我有说到性能测试要做到性能的原子化 这样我们把性能可以分为 前端, 网络, 中间件,App(应用),操作系统,数据库等,今天 我们来一起开发一个专门对Web前端性能自动化平台(后续可以在该版本的技术和基础上完善其他功能 比如说:接口的自动化和接口性能以及对其他层的监控数据做可视化)。
晴空SunnySky
2023/10/09
1K0
Debian 8如何使用Postgresql和Django应用程序
Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
小翼111
2018/08/03
2.7K0
如何在Ubuntu 18.04上安装Django Web Framework
Django是一个功能齐全的Python Web框架,用于开发动态网站和应用程序。使用Django,您可以快速创建Python Web应用程序,并依靠该框架来完成繁重的工作。
苏子晨
2018/10/11
3K0
Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用
摘要总结:本文主要介绍了一种基于Python的密码管理工具,该工具使用SQLite数据库进行密码存储和管理。主要功能包括:生成密码,导入/导出密码,保存密码记录,密码分类,自动填充,密码校验,密码加密,密码搜索和排序等功能。该工具使用Python的sqlite3模块进行数据库操作,使用哈希算法进行密码加密,使用正则表达式进行密码校验。该工具还支持密码过期和密码历史记录功能。使用该工具可以有效地管理大量密码,并保证密码的安全性。
FungLeo
2018/01/08
1.4K0
整理了45个Python小技巧,非常实用!
今天给大家介绍一个Python备忘单,可以作为学习Python编程的快速参考指南。
小F
2023/12/11
3080
整理了45个Python小技巧,非常实用!
如何在CentOS 7上使用Django应用程序使用MariaDB
Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
你在哪里
2018/10/22
2K0
如何在CentOS 7上使用PostgreSQL和Django应用程序
Django是一个用于快速创建Python应用程序的灵活框架。默认情况下,Django应用程序配置为将数据存储到轻量级SQLite数据库文件中。虽然这在某些负载下运行良好,但更传统的DBMS可以提高生产性能。
彼岸轮回
2018/10/25
3.5K0
web框架---Bottle
Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。
py3study
2020/01/19
1.1K0
web框架---Bottle
挑战30天学完Python:Day26 Python Web 服务
Python本身是一种通用的语言,可以用于很多的地方。在本篇中,我们将看到如何在Web开发中使用Python。它有很多的web架构框架。Django和Flask是比较流行。接下来我们就看看如何使用Flask进行web的开发。
MegaQi
2023/10/21
3350
挑战30天学完Python:Day26 Python Web 服务
python操作sqlite
大家好,在数据涌现的今天,数据库已成为生活中不可或缺的工具。Python作为一种流行的编程语言,内置了多种用于操作数据库的库,其中之一就是SQLite。SQLite是一种轻量级的关系型数据库管理系统,它在Python中的应用非常广泛。本文将介绍如何使用Python操作SQLite数据库,希望能够帮助大家提高数据处理能力。 1.SQLite3简介
张哥编程
2024/12/07
3470
Flask-RESTfu数据库操作的封装和使用(一)
在Flask-RESTful中,我们通常需要进行数据库操作,如增删改查等。为了使这些操作更加简单和方便,我们可以封装数据库操作,以便在应用程序的不同部分使用。
堕落飞鸟
2023/05/06
4360
如何在Ubuntu 16.04上使用Apache和mod_wsgi为Django应用程序提供服务
Django是一个功能强大的Web框架,可以帮助您快速启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生产相关的细节,都需要一个更安全,更强大的Web服务器。
独木桥先生
2018/10/19
2.5K0
猫头虎 分享:Python库 Bottle 的简介、安装、用法详解入门教程
大家好,今天猫头虎给大家带来一篇关于Python库 Bottle 的详细入门教程。这是我在开发中经常使用的一款轻量级Web框架,特别适合快速搭建小型应用程序或者API服务。最近有粉丝问猫哥关于 Bottle 的使用问题,今天就带大家一起来详细学习一下这个实用的工具。
猫头虎
2024/09/24
2420
猫头虎 分享:Python库 Bottle 的简介、安装、用法详解入门教程
Flask入门教程:构建Web应用程序的简单指南
Flask是一个轻量级的Web框架,用于构建简单而灵活的Web应用程序。它基于Python语言,易于学习和使用,适用于从小型项目到大型应用程序的各种场景。本教程将引导你逐步学习如何使用Flask构建一个基本的Web应用程序。
Michel_Rolle
2024/02/03
3.3K0
如何在Ubuntu 14.04上设置uWSGI和Nginx以服务Python应用程序
在本教程中,我们将设置一个由uWSGI提供服务的简单WSGI应用程序。我们将使用Nginx Web服务器作为应用程序服务器的反向代理,以提供更强大的连接处理。我们将在Ubuntu 14.04服务器上安装和配置这些组件。
圣人惠好可爱
2018/10/22
1.1K0
推荐阅读
相关推荐
Python一些类库的基本操作
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档