使用Python实现一个简单的Web应用:Flask与SQLite的整合

今天 2阅读

在现代Web开发中,前后端分离、API驱动的设计模式越来越流行。本文将通过一个实际项目——使用 Python 的 Flask 框架和 SQLite 数据库搭建一个简易的任务管理 Web 应用(To-Do List),来展示如何整合后端逻辑与数据库操作。

我们将涵盖以下内容:

项目结构介绍 初始化 Flask 应用 配置 SQLite 数据库 创建模型类 编写路由处理函数 实现任务的增删改查功能 测试应用运行

项目结构

我们先构建一个清晰的项目目录结构,便于后期维护与扩展。如下所示:

todo_app/│├── app.py               # 主程序文件├── models.py            # 数据模型定义├── database.py          # 数据库初始化脚本├── templates/           # HTML模板目录│   └── index.html└── instance/            # SQLite数据库文件存放位置(由Flask自动创建)

注意:instance 文件夹不会被提交到 Git 中,因为我们不希望把数据库文件包含在代码仓库中。


安装依赖

首先确保你已经安装了 Python 环境,推荐使用 Python 3.8 及以上版本。接下来安装 Flask 和 SQLAlchemy:

pip install flask flask-sqlalchemy

初始化 Flask 应用

我们在 app.py 文件中创建基本的 Flask 应用,并连接 SQLite 数据库。

# app.pyfrom flask import Flask, render_template, request, redirect, url_forfrom models import Taskfrom database import dbapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb.init_app(app)@app.route('/')def index():    tasks = Task.query.all()    return render_template('index.html', tasks=tasks)if __name__ == '__main__':    app.run(debug=True)

配置 SQLite 数据库

我们使用 Flask-SQLAlchemy 提供的 ORM 来操作 SQLite 数据库。创建 database.py 文件用于初始化数据库:

# database.pyfrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()

同时,在项目根目录下创建一个启动脚本来初始化数据库(例如 init_db.py):

# init_db.pyfrom app import appfrom database import dbwith app.app_context():    db.create_all()

运行这个脚本将在 instance/ 目录下生成 todo.db 文件:

python init_db.py

创建数据模型

接下来我们定义一个任务模型,表示 To-Do 列表中的每一项任务。

# models.pyfrom database import dbclass Task(db.Model):    id = db.Column(db.Integer, primary_key=True)    title = db.Column(db.String(100), nullable=False)    description = db.Column(db.Text, nullable=True)    completed = db.Column(db.Boolean, default=False)    def __repr__(self):        return f'<Task {self.id}>'

该模型有四个字段:

id: 唯一标识符,主键。title: 任务标题。description: 任务描述(可选)。completed: 是否完成,默认为 False

实现任务的 CRUD 功能

现在我们添加创建、更新、删除任务的功能。继续编辑 app.py 文件:

1. 添加任务

@app.route('/add', methods=['POST'])def add_task():    title = request.form.get('title')    description = request.form.get('description')    new_task = Task(title=title, description=description)    db.session.add(new_task)    db.session.commit()    return redirect(url_for('index'))

2. 更新任务状态

@app.route('/toggle/<int:task_id>')def toggle_task(task_id):    task = Task.query.get(task_id)    if task:        task.completed = not task.completed        db.session.commit()    return redirect(url_for('index'))

3. 删除任务

@app.route('/delete/<int:task_id>')def delete_task(task_id):    task = Task.query.get(task_id)    if task:        db.session.delete(task)        db.session.commit()    return redirect(url_for('index'))

编写前端页面

我们使用 Jinja2 模板引擎来渲染 HTML 页面。创建 templates/index.html

<!-- templates/index.html --><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>To-Do List</title></head><body>    <h1>我的待办事项</h1>    <form action="{{ url_for('add_task') }}" method="post">        <input type="text" name="title" placeholder="任务标题" required>        <br>        <textarea name="description" placeholder="任务描述"></textarea>        <br>        <button type="submit">添加任务</button>    </form>    <hr>    <ul>        {% for task in tasks %}            <li style="text-decoration: {% if task.completed %}line-through{% else %}none{% endif %};">                <strong>{{ task.title }}</strong>                <p>{{ task.description }}</p>                <a href="{{ url_for('toggle_task', task_id=task.id) }}">切换状态</a> |                <a href="{{ url_for('delete_task', task_id=task.id) }}">删除</a>            </li>        {% endfor %}    </ul></body></html>

运行并测试应用

回到终端,运行 Flask 应用:

python app.py

访问 http://localhost:5000,你将看到一个简单的任务管理系统界面。你可以:

添加新的任务;查看所有任务;点击“切换状态”来标记任务为已完成或未完成;点击“删除”来移除任务。

总结

通过本文,我们实现了一个基于 Flask 和 SQLite 的简单任务管理 Web 应用。我们学习了:

如何设置 Flask 项目结构;如何使用 Flask-SQLAlchemy 进行数据库建模;如何实现基本的 CRUD 操作;如何结合 Jinja2 模板进行前后端交互。

虽然这是一个小型项目,但它涵盖了 Web 开发的核心概念,如请求处理、数据库操作、模板渲染等。读者可以在此基础上进一步扩展,例如加入用户登录系统、RESTful API 接口、使用 Bootstrap 美化前端页面等功能。

如果你对该项目感兴趣,欢迎将其作为练习项目深入研究和改进!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第67298名访客 今日有13篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!