欢迎访问宙启技术站
智能推送

使用Flask和SQLite构建一个简单的任务管理应用

发布时间:2023-12-18 04:59:29

Flask是一个基于Python的轻量级Web应用框架,而SQLite是一个嵌入式的关系型数据库引擎。我们可以使用Flask和SQLite来构建一个简单的任务管理应用,该应用允许用户添加、查看和删除任务。

首先,我们需要安装Flask和SQLite。可以使用下面的命令来安装它们:

pip install Flask

接下来,创建一个新文件app.py,并导入所需的模块:

from flask import Flask, render_template, request, redirect, url_for
import sqlite3

我们需要创建一个Flask应用实例,并配置数据库连接:

app = Flask(__name__)
app.config['DATABASE'] = 'tasks.db'

def get_db_connection():
    conn = sqlite3.connect(app.config['DATABASE'])
    conn.row_factory = sqlite3.Row
    return conn

def init_db():
    conn = get_db_connection()
    with app.open_resource('schema.sql', mode='r') as f:
        conn.cursor().executescript(f.read())
    conn.commit()
    conn.close()

if __name__ == '__main__':
    init_db()
    app.run(debug=True)

上述代码中,我们定义了两个函数get_db_connectioninit_db

get_db_connection用于获取一个数据库连接,该函数会在每次需要访问数据库时调用。

init_db用于初始化数据库,该函数会在应用启动时调用。我们还在应用启动时调用init_db来创建数据库以及任务表。需要提供一个名为schema.sql的文件,用于定义数据库模式。

现在,我们可以定义一些路由和视图函数来处理请求。

首先,我们需要一个视图函数来显示所有的任务。我们可以将任务信息存储在一个tasks表中,该表包含idtitledescription字段。下面是获取并显示所有任务的视图函数:

@app.route('/')
def index():
    conn = get_db_connection()
    tasks = conn.execute('SELECT * FROM tasks').fetchall()
    conn.close()
    return render_template('index.html', tasks=tasks)

在此函数中,我们首先获取数据库连接,然后使用SELECT语句从tasks表中获取所有任务。接下来,我们关闭数据库连接并将任务列表传递给模板index.html

接下来,我们需要一个视图函数来添加新任务。该函数将提供一个表单用于输入任务的标题和描述。当用户提交表单时,我们将在数据库中插入新任务并将其重定向到任务列表页面。下面是添加任务的视图函数:

@app.route('/add', methods=['GET', 'POST'])
def add():
    if request.method == 'POST':
        title = request.form['title']
        description = request.form['description']
        
        conn = get_db_connection()
        conn.execute('INSERT INTO tasks (title, description) VALUES (?, ?)',
                     (title, description))
        conn.commit()
        conn.close()
        
        return redirect(url_for('index'))
        
    return render_template('add.html')

在此函数中,我们首先检查请求的方法是否为POST。如果是,我们获取表单中的标题和描述,然后在数据库中插入新任务。最后,我们将用户重定向到任务列表页面。如果请求方法不是POST,则我们将显示一个包含任务添加表单的模板。

最后,我们需要一个视图函数来删除任务。该函数将根据任务的ID从数据库中删除任务,并将用户重定向到任务列表页面。下面是删除任务的视图函数:

@app.route('/delete/<int:id>', methods=['POST'])
def delete(id):
    conn = get_db_connection()
    conn.execute('DELETE FROM tasks WHERE id = ?', (id,))
    conn.commit()
    conn.close()
    
    return redirect(url_for('index'))

在此函数中,我们首先获取任务的ID并在数据库中删除相应的任务。最后,我们将用户重定向到任务列表页面。

我们还需要创建两个模板index.htmladd.html,来显示任务列表和任务添加表单。下面是一个简单的例子:

<!-- index.html -->
<!doctype html>
<html>
<head>
    <title>Task Manager</title>
</head>
<body>
    <h1>Task Manager</h1>
    
    <h2>Tasks</h2>
    <ul>
        {% for task in tasks %}
        <li>
            {{ task['title'] }} - {{ task['description'] }}
            <form action="{{ url_for('delete', id=task['id']) }}" method="post" style="display:inline;">
                <button type="submit">Delete</button>
            </form>
        </li>
        {% endfor %}
    </ul>
    
    <h2>Add Task</h2>
    <form action="{{ url_for('add') }}" method="post">
        <input type="text" name="title" placeholder="Title" required>
        <input type="text" name="description" placeholder="Description" required>
        <button type="submit">Add</button>
    </form>
</body>
</html>

<!-- add.html -->
<!doctype html>
<html>
<head>
    <title>Add Task</title>
</head>
<body>
    <h1>Add Task</h1>
    
    <form action="{{ url_for('add') }}" method="post">
        <input type="text" name="title" placeholder="Title" required>
        <input type="text" name="description" placeholder="Description" required>
        <button type="submit">Add</button>
    </form>
</body>
</html>

在以上示例中,我们在index.html中显示任务列表,并为每个任务创建一个删除按钮。对于添加任务,我们使用add.html模板。

最后,我们可以运行应用并在浏览器中访问http://localhost:5000来查看任务管理应用。

以上就是使用Flask和SQLite构建一个简单的任务管理应用的示例。通过这个应用,用户可以添加、查看和删除任务,使任务管理更加方便和高效。当然,这只是一个简单的示例,你可以根据自己的需求和喜好进行扩展和定制。