使用Python构建一个简单的Web应用:从零开始实现Flask项目
在现代软件开发中,Web 应用的构建已经成为不可或缺的一部分。Python 作为一种简洁、高效的编程语言,在Web开发领域也有着广泛的应用。本文将通过使用 Python 的 Flask 框架,带您一步步构建一个简单的 Web 应用程序,并展示其背后的技术原理和代码实现。
项目概述
我们将要创建的是一个“待办事项(To-Do List)”应用。该应用允许用户添加、查看和删除待办任务。它将基于 Flask 框架进行开发,使用 SQLite 数据库来存储数据,并使用 HTML/CSS 进行前端展示。
环境准备
安装依赖
首先,确保你已经安装了 Python 环境。我们推荐使用 Python 3.8 及以上版本。接下来,我们需要安装 Flask 和 SQLite 相关库:
pip install flask flask-sqlalchemy
flask
: 核心框架。flask-sqlalchemy
: 提供对 SQLAlchemy ORM 的支持,方便操作数据库。项目结构
我们的项目结构如下:
todo-app/├── app.py├── requirements.txt├── templates/│ ├── index.html└── instance/ └── todo.db
其中:
app.py
是主程序文件;requirements.txt
包含所有依赖;templates/
存放 HTML 模板;instance/
存放 SQLite 数据库文件。数据库设计
我们使用 SQLite 数据库存储待办事项信息。每条记录包括:
id: 主键;content: 待办内容;complete: 是否完成。使用 Flask-SQLAlchemy 来定义模型类:
from flask_sqlalchemy import SQLAlchemyfrom flask import Flaskapp = Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)class Todo(db.Model): id = db.Column(db.Integer, primary_key=True) content = db.Column(db.String(200), nullable=False) complete = db.Column(db.Boolean, default=False)# 创建数据库with app.app_context(): db.create_all()
路由与视图函数
接下来,我们编写处理 HTTP 请求的视图函数。
添加任务
from flask import request, redirect, url_for, render_template@app.route('/', methods=['GET', 'POST'])def index(): if request.method == 'POST': task_content = request.form['content'] new_task = Todo(content=task_content) db.session.add(new_task) db.session.commit() return redirect(url_for('index')) tasks = Todo.query.all() return render_template('index.html', tasks=tasks)
删除任务
@app.route('/delete/<int:id>')def delete(id): task_to_delete = Todo.query.get_or_404(id) db.session.delete(task_to_delete) db.session.commit() return redirect(url_for('index'))
标记为完成
@app.route('/complete/<int:id>')def complete(id): task = Todo.query.get_or_404(id) task.complete = not task.complete db.session.commit() return redirect(url_for('index'))
模板渲染
我们在 templates/index.html
中编写 HTML 页面,使用 Jinja2 模板引擎动态渲染数据。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>To-Do List</title> <style> .completed { text-decoration: line-through; color: gray; } </style></head><body> <h1>我的待办事项</h1> <form method="POST"> <input type="text" name="content" placeholder="添加新任务..." required> <button type="submit">添加</button> </form> <ul> {% for task in tasks %} <li class="{{ 'completed' if task.complete else '' }}"> {{ task.content }} <a href="{{ url_for('complete', id=task.id) }}">[{{ '撤销' if task.complete else '完成' }}]</a> <a href="{{ url_for('delete', id=task.id) }}" onclick="return confirm('确定删除?')">[删除]</a> </li> {% endfor %} </ul></body></html>
运行应用
最后,在 app.py
文件末尾添加启动语句:
if __name__ == '__main__': app.run(debug=True)
然后执行:
python app.py
打开浏览器访问 http://localhost:5000,即可看到你的 To-Do 列表应用!
技术分析
1. Flask 架构简介
Flask 是一个轻量级的 WSGI Web 应用框架。它不强制开发者遵循特定的项目结构或模式,但提供了灵活的扩展机制。Flask 的核心是请求响应循环,其基本流程如下:
用户发送 HTTP 请求;Flask 接收请求并根据 URL 路由到对应的视图函数;视图函数处理业务逻辑,可能涉及数据库操作;返回响应给客户端(如 HTML 页面、JSON 数据等)。2. ORM 的优势
我们使用了 SQLAlchemy ORM(对象关系映射),它将数据库操作转换为面向对象的方式。相比直接写 SQL 语句,ORM 提供了以下优势:
更好的可读性和维护性;避免 SQL 注入风险;支持多种数据库后端。3. 模板引擎的作用
Jinja2 是 Flask 默认的模板引擎。它允许我们在 HTML 中嵌入变量和控制结构,使得页面内容可以动态生成。例如:
{% for task in tasks %} <li>{{ task.content }}</li>{% endfor %}
4. 前端交互优化建议
虽然目前的功能已能满足基本需求,但我们可以进一步优化用户体验,比如:
使用 JavaScript 实现无刷新操作;引入 Bootstrap 或 Tailwind CSS 提升样式;使用 AJAX 提交表单;添加分页功能。总结
本文通过一个完整的示例,介绍了如何使用 Flask 构建一个简单的 To-Do Web 应用。我们涵盖了从项目结构搭建、数据库设计、路由配置、模板渲染到前后端交互的完整过程。希望读者能从中掌握 Flask 开发的基本流程,并为进一步深入学习打下基础。
参考资料:
Flask 官方文档SQLAlchemy ORM 文档Jinja2 模板文档如果你喜欢这篇文章,欢迎关注我获取更多 Python 和 Web 开发相关内容!