使用Python实现一个简单的Web应用:Flask与SQLite的整合
在现代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 美化前端页面等功能。
如果你对该项目感兴趣,欢迎将其作为练习项目深入研究和改进!