📅  最后修改于: 2023-12-03 15:06:45.360000             🧑  作者: Mango
Bottle 是一个快速、简单,也很容易学习的 Python Web 框架。在本篇文章中,我们将使用 Bottle 框架开发一个笑话应用程序。
本笑话应用程序将会有以下功能:
开发本应用程序需要的环境如下:
本应用程序将使用 SQLite 作为数据库。我们将使用以下表格:
|字段|类型|描述| |----|----|----| |id|INTEGER|笑话的 ID| |content|TEXT|笑话内容| | posted_on|DATETIME|上传时间|
我们使用以下表单添加笑话:
|字段|类型|描述| |----|----|----| |content|TEXT|笑话内容|
首先,我们需要导入需要用到的模块。
import sqlite3
from bottle import route, run, template, request
接下来是数据库连接:
# 连接数据库
conn = sqlite3.connect('jokes.db')
# 创建 jokes 表格
conn.execute('''CREATE TABLE IF NOT EXISTS jokes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
posted_on DATETIME NOT NULL
);''')
# 关闭数据库
conn.close()
# 添加新笑话
def insert_joke(content):
conn = sqlite3.connect('jokes.db')
conn.execute("INSERT INTO jokes (content,posted_on) VALUES (?,datetime('now'))", (content,))
conn.commit()
conn.close()
接着是首页:
@route('/')
def index():
conn = sqlite3.connect('jokes.db')
jokes = conn.execute('SELECT * FROM jokes;').fetchall()
conn.close()
return template('index', jokes=jokes)
我们使用 SELECT * FROM jokes
从数据库中获取所有笑话,并使用 template
函数渲染 HTML 模板。我们使用 jokes
参数将笑话传递到 HTML 模板中。
然后是展示单个笑话页面:
@route('/joke/<joke_id:int>')
def joke(joke_id):
conn = sqlite3.connect('jokes.db')
joke = conn.execute('SELECT * FROM jokes WHERE id=?', (joke_id,)).fetchone()
conn.close()
return template('joke', joke=joke)
我们使用 SELECT * FROM jokes WHERE id=?
根据笑话的 ID 从数据库中获取单个笑话,并使用 template
函数渲染 HTML 模板。我们使用 joke
参数将笑话传递到 HTML 模板中。
之后是添加笑话页面:
@route('/add_joke')
def add_joke():
return template('add_joke')
使用 template
函数渲染 HTML 模板。在模板中定义表单。
<h2>Add Joke</h2>
<form action="/add_joke" method="post">
<input type="text" name="content">
<input type="submit" value="Submit">
</form>
接着是处理添加笑话表单:
@route('/add_joke', method='POST')
def do_add_joke():
content = request.forms.get('content')
insert_joke(content)
return '<script>alert("Success!"); location.href="/"</script>'
我们使用 request.forms.get('content')
获取表单中输入的笑话内容。然后,我们调用 insert_joke
函数将笑话内容插入到数据库中。最后,使用 JavaScript 提示用户笑话添加成功,并跳转到首页。
最后是随机笑话页面:
@route('/random_joke')
def random_joke():
conn = sqlite3.connect('jokes.db')
joke = conn.execute('SELECT * FROM jokes ORDER BY RANDOM() LIMIT 1;').fetchone()
conn.close()
return template('joke', joke=joke)
我们使用 ORDER BY RANDOM() LIMIT 1
从数据库中获取一个随机笑话,并使用 template
函数渲染 HTML 模板。我们使用 joke
参数将笑话传递到 HTML 模板中。
最后是 HTML 模板。我们使用以下模板:
<h2>All Jokes</h2>
<a href="/add_joke">Add Joke</a>
<a href="/random_joke">Random Joke</a>
<table>
<thead>
<tr>
<th>ID</th>
<th>Content</th>
<th>Posted On</th>
</tr>
</thead>
<tbody>
%for joke in jokes:
<tr>
<td>{{joke[0]}}</td>
<td>{{joke[1]}}</td>
<td>{{joke[2]}}</td>
<td><a href="/joke/{{joke[0]}}">View</a></td>
</tr>
%end
</tbody>
</table>
<h2>Joke</h2>
<p>{{joke[1]}}</p>
<p>Posted on {{joke[2]}}</p>
<h2>Add Joke</h2>
<form action="/add_joke" method="post">
<input type="text" name="content">
<input type="submit" value="Submit">
</form>
最后,我们使用以下代码运行应用程序:
if __name__ == '__main__':
run()
默认情况下,应用程序将运行在 http://localhost:8080。打开浏览器并访问该地址。你会看到所有笑话的列表。
点击“Add Joke”链接将打开添加笑话页面。在表单中输入笑话内容,然后点击“Submit”按钮。笑话将被添加到数据库中,并跳转到首页。
点击笑话列表中的“View”链接将打开具体笑话页面。点击“Random Joke”链接将打开随机笑话页面。