基于原生JavaScript前端和 Flask 后端的Todo 应用 - 详解
Demo地址:https://gitcode.com/rmbnetlife/todo-app-js-flask.git
Python Todo 应用
这是一个使用Python Flask框架开发的简单待办事项(Todo)应用,采用前后端分离架构。本项目实现了待办事项的添加、删除、状态切换等基本功能,并提供了直观的用户界面,适合作为Web开发学习示例或小型团队的任务管理工具。
项目架构
本项目采用经典的前后端分离架构:
- 后端:基于Flask的RESTful API服务,负责数据处理和存储
- 前端:纯静态HTML/CSS/JavaScript实现,通过Fetch API与后端交互
- 数据存储:使用JSON文件作为轻量级数据存储方案,无需配置数据库
项目结构
python-todo-demo/
├── backend/ # Python 后端
│ ├── app.py # Flask 主程序 - RESTful API实现
│ ├── requirements.txt # 依赖列表
│ └── todos.json # 数据存储文件(替代数据库)
│
└── frontend/ # 静态前端
├── index.html # 前端页面 - 包含HTML结构和JavaScript逻辑
└── styles.css # 样式文件 - 美化界面的CSS样式
设计逻辑
后端设计
后端采用Flask框架实现RESTful API,主要设计考虑:
- 轻量级数据存储:使用JSON文件存储数据,避免数据库配置,简化部署
- RESTful API设计:遵循REST原则,使用适当的HTTP方法和状态码
- 跨域支持:通过Flask-CORS启用CORS,支持前后端分离开发
- 错误处理:适当的错误状态码和消息返回
- ID生成策略:使用最大ID递增策略,确保ID唯一性,避免ID冲突
前端设计
前端采用原生JavaScript实现,主要设计考虑:
- 分类显示:将待办事项分为"未完成"和"已完成"两个区域,提高用户体验
- 响应式交互:支持点击切换状态、删除操作,以及回车键添加新任务
- 视觉反馈:通过样式变化(如删除线、颜色变化)提供明确的任务状态反馈
- 简洁界面:采用卡片式设计和柔和配色,提供舒适的视觉体验
功能特点
基本功能:
- 添加新的待办事项(支持回车键快速添加)
- 删除不需要的待办事项
- 标记待办事项为已完成/未完成
- 分类显示已完成和未完成的任务
技术特点:
- 基于Flask的RESTful API
- 使用JSON文件存储数据(无需数据库)
- 纯前端实现,无需服务器端渲染
- 响应式设计,操作简单直观
- 安全的ID生成策略,避免ID冲突
安装部署
环境要求
- Python 3.6+
- 支持现代JavaScript的Web浏览器
1. 克隆项目
git clone <项目仓库URL>cd python-todo-app
2. 安装依赖
cd backend
pip install -r requirements.txt
这将安装以下依赖:
- Flask - Web框架
- Flask-CORS - 跨域资源共享支持
3. 启动后端服务
cd backend
python app.py
服务器将在 http://localhost:5000 运行,并在控制台输出调试信息
4. 访问前端页面
有两种方式可以访问前端页面:
方式一:直接打开文件(简单但可能受到CORS限制)
- 直接在浏览器中打开
frontend/index.html
文件
方式二:使用简单的HTTP服务器(推荐)
# 如果安装了Python,可以使用内置的HTTP服务器
cd frontend
python -m http.server 8080
然后访问 http://localhost:8080
API接口详解
获取所有待办事项
- URL:
/api/todos
- 方法:
GET
- 响应: 待办事项数组
[ { "id": 1 , "text": "示例任务" , "completed": false } , ... ]
添加新的待办事项
- URL:
/api/todos
- 方法:
POST
- 请求体:
{ "text": "新的待办事项" }
- 响应: 新创建的待办事项,状态码201
删除指定待办事项
- URL:
/api/todos/<id>
- 方法:
DELETE
- 响应: 被删除的待办事项,状态码200
切换待办事项的完成状态
- URL:
/api/todos/<id>/toggle
- 方法:
PUT
- 响应: 更新后的待办事项,状态码200
数据存储
项目使用JSON文件(todos.json
)作为数据存储,格式如下:
[
{
"id": 1
,
"text": "示例任务1"
,
"completed": false
}
,
{
"id": 2
,
"text": "示例任务2"
,
"completed": true
}
]
技术栈
后端:
- Python 3.6+
- Flask - Web框架
- Flask-CORS - 跨域资源共享
- JSON - 数据存储
前端:
- HTML5 - 页面结构
- CSS3 - 样式和布局
- JavaScript (ES6+) - 交互逻辑
- Fetch API - 网络请求
常见问题
Q: 如何修改服务器端口?
A: 在backend/app.py
文件的最后一行修改port
参数:
app.run(port=你想要的端口号, debug=True
)
Q: 如何解决CORS(跨域)问题?
A: 项目已通过Flask-CORS处理了跨域问题。如果仍有问题,确保前端请求的URL与后端服务器地址匹配。
Q: 如何备份数据?
A: 定期复制backend/todos.json
文件即可备份所有数据。
未来改进方向
- 添加用户认证系统
- 支持任务分类和标签
- 实现任务优先级和截止日期
- 添加数据库支持(如SQLite或MongoDB)
- 开发移动端应用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928490.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
怎么样自学做网站wordpress框架简介
WampServer集成环境安装与配置实习到了第三个礼拜了,原来我们小组是以开发php为主的,我们项目的服务器也是用php做的,因此我觉得很有必要学一下php的相关知识,首先当然是搭建环境了,写篇博客分享下经验. 目录: 一.软件下载 二 ...C++与Lua交互(三)通过上一篇…
详细介绍:【AI论文】R2R:通过小型与大型模型之间的令牌路由高效导航发散推理路径
pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …
TDengine 运维——巡检应用(安装前预配置)
TDengine 运维——巡检应用(安装前预配置)2025-10-05 16:47
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…
网站防止镜像郑州发布最新通知
ASO行业资讯1数据周报12月8日起,用户在任何 Apple 平台下载 App 之前,App Store 都会先帮助其了解该 App 的隐私保护做法。在每款 App 的产品页面上,用户能了解到该 App 可能收集的某些数据类型,以及该数据是否会关联到他们或对其…
网站中的打赏怎么做的网站开发中网页上传和网站发布
有一种常见的说法是外观完全决定了吸引力,错,如果你希望人们被你吸引,如果你想做一个优秀的、成功的、万众瞩目的女性,那么你必须做很多努力,才能成为一个有魅力的人。1做自己不要复制像杰西卡兰格或安德里亚汤普森这样…
优化网站性能网站建设项目表
流程:1.DrissionPageSelenium自动爬虫工具采集漫画视频、详情、标签等约200万条漫画数据存入mysql数据库; 2.Mapreduce对采集的动漫数据进行数据清洗、拆分数据项等,转为.csv文件上传hadoop的hdfs集群; 3.hive建库建表导入.csv动漫…
郑州网站设计汉狮匈牙利网站后缀
From: http://blog.csdn.net/guogeer/article/details/7407508 [html] view plaincopy下列选项控制编译器警告信息: --all-warnings 此开关缺少可用文档 --extra-warnings 此开关缺少可用文档 -W 不建议使用此开关…
2025.10.5 2024CCPC郑州
施工中……
vp 5/13 (B C F L M)
简要题解
L
找规律,模拟即可
B
按题意BFS即可
F
发现如果第三天不被影响,那么后面都将重复前两天。
如果第三天被影响,那么说明单天的任务无法在一天内做完,后面都将被影响。
模拟…
20250531MATLAB三维绘图 - 教程
20250531MATLAB三维绘图 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…
概率期望dp 复习笔记
## 题目分析
注意到 $a_i\in[1,3]$,故设 $f_{i,j,k}$ 表示现在碗里只有 $1$ 个的有 $i$ 碗,只有 $2$ 个的有 $j$ 碗,只有 $3$ 个的有 $k$ 碗。我们发现从 $f_{x,y,z}$ 推到 $f_{0,0,0}$ 是复杂的。不妨将整个过程反…
2016网站谷歌权重网站怎么做淘宝客
基本类型转换 1、自动类型转换2、强制类型转换 1、自动类型转换
定义:当Java程序在进行赋值或者运算时,精度小的类型会自动转换成精度大的数据类型,这个就是自动类型转换。(自动小转大) 背多芬: 这里要明…
【计网】第六章(网络层)习题测试 - 实践
【计网】第六章(网络层)习题测试 - 实践2025-10-05 16:31
tlnshuju
阅读(0)
评论(0) 收藏
举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…
04-springIOC03-通过配置类实现IOC
04-springIOC03-通过配置类实现IOC$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");Spring IOC基于Java配置类详解
一、IOC容器核心概念
1.1 什么是IOC(控制…
网站建设公司厦门wordpress上长缺少临时文件夹
目录 3. 使用 Microsoft 证书颁发机构创建 VMCA 证书模板3.1 打开 Certificate Template Console3.2 复制模板修改 Compatibility 选项卡修改 General 选项卡修改 Extensions 选项卡确认新模板 4. 将新模板添加到证书模板4.1 打开 Certificate Console4.2 创建证书模板 关联博文…
完整教程:爬虫--以爬取小说为例
完整教程:爬虫--以爬取小说为例pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…
PCIe扫盲——物理层逻辑部分基础(一)
首先,回顾一下,之前看了很多遍的PCIe的Layer结构图:PCIe中的物理层主要完成编解码(8b/10b for Gen1&Gen2,128b/130b for Gen3 and later)、扰码与解扰码、串并转换、差分发送与接收、链路训练等功能。其中链…