📜  烧瓶示例 - Python (1)

📅  最后修改于: 2023-12-03 15:27:04.869000             🧑  作者: Mango

烧瓶示例 - Python

烧瓶(Bottle)是一个基于 Python 的轻量级 Web 框架,它使用简单、易于学习,适合小型 Web 服务和 API 的开发。在这篇文章中,我们将介绍如何使用 Bottle 框架创建一个简单的 Web 应用程序。

安装和使用

在安装 Bottle 框架之前,确保已经安装了 Python。然后,可以在终端中使用以下命令安装 Bottle:

pip install bottle

在安装 Bottle 后,我们可以开始创建我们的应用程序。在项目目录下,创建一个名为 "app.py" 或者 "server.py" 的文件。然后在该文件中导入 Bottle 模块,创建 Bottle 应用程序对象,并定义一些路由:

from bottle import Bottle, route, run

app = Bottle()

@app.route('/')
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()

在这个例子中,我们创建了一个应用程序,监听根路由 '/'。当用户请求该路由时,返回 "Hello World!"。我们可以使用以下命令运行该应用程序:

python3 app.py

此时,我们可以通过访问 http://localhost:8080 来测试我们的应用程序。

使用模板

Bottle 框架支持使用模板引擎来渲染 HTML 页面。我们可以使用 Jinja2 模板引擎来创建动态内容的页面。

首先,我们需要安装 Jinja2,可以使用以下命令:

pip install Jinja2

接下来,我们需要在应用程序中引入 Jinja2 和模板文件:

from bottle import Bottle, template

# 创建应用程序对象
app = Bottle()

# 路由
@app.route('/')
def index():
    # 使用模板渲染页面
    return template('index.html', name='Bottle')

# 运行应用程序
if __name__ == '__main__':
    app.run()

这里我们创建了一个路由 '/index',使用模板 'index.html' 来渲染页面。在模板中,我们可以使用 Jinja2 的语法来嵌入变量和逻辑控制结构:

<!DOCTYPE html>
<html>
<head>
    <title>{{name}} - Bottle</title>
</head>
<body>
    <h1>Welcome to {{name}}!</h1>
    <p>This is a demo application using Bottle and Jinja2.</p>
</body>
</html>

在这个例子中,我们在模板中使用了变量 {{name}},它会被传递到模板中作为参数。我们也可以使用控制结构,如 if, for, include 等。

使用数据库

在应用程序中使用数据库是非常常见的。Bottle 框架可以与许多常见的关系型数据库进行集成,如 MySQL、PostgreSQL 和 SQLite 等。

在这个例子中,我们将演示如何使用 SQLite 数据库。首先,我们需要安装 PySQLite 内存库和 SQLite3:

pip install pysqlite3

然后,我们需要在应用程序中导入 SQLite3 和 Bottle 模块:

import sqlite3
from bottle import Bottle, template, request, redirect

# 创建应用程序对象
app = Bottle()

接下来,我们需要创建一个数据库和表:

# 创建数据库连接和游标
conn = sqlite3.connect(':memory:')
c = conn.cursor()

# 创建表
c.execute('''CREATE TABLE users
             (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)''')

# 添加数据
c.execute("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')")
c.execute("INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com')")

# 提交更改
conn.commit()

在这个例子中,我们使用了内存数据库,并创建了一个名为 users 的表,并添加了两个用户。

接下来,我们可以在应用程序中创建一个路由来显示所有用户:

@app.route('/')
def index():
    # 查询数据库中的所有用户
    c.execute("SELECT * FROM users")
    rows = c.fetchall()
    # 渲染模板并返回结果
    return template('users.html', rows=rows)

在模板 'users.html' 中,我们可以使用 Jinja2 的语法来循环遍历所有用户,并使用表格将它们显示出来:

<!DOCTYPE html>
<html>
<head>
    <title>Users - Bottle</title>
</head>
<body>
    <h1>User List</h1>
    <table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
    </thead>
    <tbody>
        {% for user in rows %}
        <tr>
            <td>{{ user[0] }}</td>
            <td>{{ user[1] }}</td>
            <td>{{ user[2] }}</td>
        </tr>
        {% endfor %}
    </tbody>
    </table>
    <p><a href="/add">Add User</a></p>
</body>
</html>

我们还可以创建另一个路由 '/add',来添加一个新用户:

@app.route('/add')
def add():
    # 渲染表单
    return template('add_user.html')

@app.route('/add', method='POST')
def do_add():
    # 获取表单数据
    name = request.POST.get('name')
    email = request.POST.get('email')
    # 插入数据
    c.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))
    conn.commit()
    # 重定向至首页
    redirect('/')

在模板 'add_user.html' 中,我们可以使用表单来接收新用户的信息,并将信息提交到服务器:

<!DOCTYPE html>
<html>
<head>
    <title>Add User - Bottle</title>
</head>
<body>
    <h1>Add User</h1>
    <form action="/add" method="POST">
        <table>
        <tr>
            <td>Name:</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td>Email:</td>
            <td><input type="text" name="email"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="Submit"></td>
        </tr>
        </table>
    </form>
    <p><a href="/">Back to User List</a></p>
</body>
</html>

在这个例子中,我们创建了一个表单,并在提交后使用 POST 方法,将数据发送到服务器。在服务器端,我们获取表单数据,将它们插入到数据库中,并使用重定向将用户返回到首页。

总结

在本文中,我们介绍了如何使用 Bottle 框架创建一个简单的 Web 应用程序,并演示了如何使用模板和数据库。Bottle 框架是一个非常适合小型 Web 服务和 API 的框架,因为它非常易于学习和使用。如果你想了解更多关于 Bottle 框架的内容,请查看官方文档。