使用Python构建一个简单的Web应用:从零开始实现Flask项目

06-24 13阅读

在现代软件开发中,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 开发相关内容!

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

目录[+]

您是本站第4837名访客 今日有35篇新文章

微信号复制成功

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