基于原生JavaScript前端和 Flask 后端的Todo 应用

news2025/6/3 21:57:14

在这里插入图片描述
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,主要设计考虑:

  1. 轻量级数据存储:使用JSON文件存储数据,避免数据库配置,简化部署
  2. RESTful API设计:遵循REST原则,使用适当的HTTP方法和状态码
  3. 跨域支持:通过Flask-CORS启用CORS,支持前后端分离开发
  4. 错误处理:适当的错误状态码和消息返回
  5. ID生成策略:使用最大ID递增策略,确保ID唯一性,避免ID冲突

前端设计

前端采用原生JavaScript实现,主要设计考虑:

  1. 分类显示:将待办事项分为"未完成"和"已完成"两个区域,提高用户体验
  2. 响应式交互:支持点击切换状态、删除操作,以及回车键添加新任务
  3. 视觉反馈:通过样式变化(如删除线、颜色变化)提供明确的任务状态反馈
  4. 简洁界面:采用卡片式设计和柔和配色,提供舒适的视觉体验

功能特点

  • 基本功能

    • 添加新的待办事项(支持回车键快速添加)
    • 删除不需要的待办事项
    • 标记待办事项为已完成/未完成
    • 分类显示已完成和未完成的任务
  • 技术特点

    • 基于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.coloradmin.cn/o/2395240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MIT 6.S081 2020 Lab6 Copy-on-Write Fork for xv6 个人全流程

文章目录 零、写在前面一、Implement copy-on write1.1 说明1.2 实现1.2.1 延迟复制与释放1.2.2 写时复制 零、写在前面 可以阅读下 《xv6 book》 的第五章中断和设备驱动。 问题 在 xv6 中&#xff0c;fork() 系统调用会将父进程的整个用户空间内存复制到子进程中。**如果父…

第304个Vulnhub靶场演练攻略:digital world.local:FALL

digital world.local&#xff1a;FALL Vulnhub 演练 FALL (digitalworld.local: FALL) 是 Donavan 为 Vulnhub 打造的一款中型机器。这款实验室非常适合经验丰富的 CTF 玩家&#xff0c;他们希望在这类环境中检验自己的技能。那么&#xff0c;让我们开始吧&#xff0c;看看如何…

Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 模拟高度尺系统开发详解——实现拖动、范围限制、碰撞吸附与本地坐标轴选择 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不…

万字详解RTR RTSP SDP RTCP

目录 1 RTSP1.1 RTSP基本简介1.2 RSTP架构1.3 重点内容分析 2 RTR2.1 RTR简介2.2 RTP 封装 H.2642.3 RTP 解封装 H.2642.4 RTP封装 AAC2.5 RTP解封装AAC 3 SDP3.1 基础概念3.2 SDP协议示例解析3.3 重点知识 4 RTCP4.1 RTCP基础概念4.2 重点 5 总结 1 RTSP 1.1 RTSP基本简介 一…

云服务器如何自动更新系统并保持安全?

云服务器自动更新系统是保障安全、修补漏洞的重要措施。下面是常见 Linux 系统&#xff08;如 Ubuntu、Debian、CentOS&#xff09;和 Windows 服务器自动更新的做法和建议&#xff1a; 1. Linux 云服务器自动更新及安全维护 Ubuntu / Debian 系统 手动更新命令 sudo apt up…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css&#xff0c;以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法&#xff0c;那应该写呢&#xff1f; 1.引入react-native-linear-gradient插件&#xff0c;我使用的是…

【数据分析】特征工程-特征选择

【数据分析】特征工程-特征选择 &#xff08;一&#xff09;方差过滤法1.1 消除方差为0的特征1.2 保留一半的特征1.3 特征是二分类时 &#xff08;二&#xff09;相关性过滤法2.1 卡方过滤2.2 F检验2.3 互信息法 &#xff08;三&#xff09;其他3.1 包装法3.2 嵌入法3.3 衍生特…

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~这个标题我还蛮喜欢的嘿嘿嘿【附上一个自行思考的猥琐的笑容】 前段时间不是在开发uni-app的一个小应用嘛,然后今天测试发现,有一个地方在苹果是没有问题的,但是在安卓上出现了问题,附上安卓的截图 在这里我是有限制maxLength=50的,而且,赋值字符串到字…

嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)

printf重定义&#xff1a; C语言里面的printf函数默认输出设备是显示器&#xff0c;如果要实现printf函数输出正在串口或者LCD显示屏上&#xff0c;必须要重定义标准库函数里调用的与输出设备相关的函数&#xff0c;比如printf输出到串口&#xff0c;需要将fputc里面的输出指向…

【大模型】情绪对话模型项目研发

一、使用框架&#xff1a; Qwen大模型后端Open-webui前端实现使用LLamaFactory的STF微调数据集&#xff0c;vllm后端部署&#xff0c; 二、框架安装 下载千问大模型 安装魔塔社区库文件 pip install modelscope Download.py 内容 from modelscope import snapshot_downlo…

【PCI】PCI入门介绍(包含部分PCIe讲解)

先解释一下寻址空间&#xff1a; 机器是32bit的话&#xff0c;意味着4G&#xff08;2的32次方&#xff09;寻址空间&#xff0c;内存条作为它的实际物理存储设备。大部分在跑内存程序运行&#xff0c;少部分用来存放其他东西。这是一个常见的4G寻址空间分布&#xff08;不一定是…

使用PowerBI个人网关定时刷新数据

使用PowerBI个人网关定时刷新数据 PowerBI desktop连接mysql&#xff0c;可以设置定时刷新数据或在PowerBI服务中手动刷新数据,步骤如下&#xff1a; 第一步&#xff1a; 下载网关。以个人网关为例&#xff0c;如图 第二步&#xff1a; 双击网关&#xff0c;点击下一步&…

数字人引领政务新风尚:智能设备助力政务服务

在信息技术飞速发展的今天&#xff0c;政府机构不断探索提升服务效率和改善服务质量的新途径。实时交互数字人在政务服务中的应用正成为一大亮点&#xff0c;通过将“数字公务员”植入各种横屏智能设备中&#xff0c;为民众办理业务提供全程辅助。这种创新不仅优化了政务大厅的…

深入剖析Java类加载机制:双亲委派模型的突破与实战应用

引言&#xff1a;一个诡异的NoClassDefFoundError 某金融系统在迁移到微服务架构后&#xff0c;突然出现了一个诡异问题&#xff1a;在调用核心交易模块时&#xff0c;频繁抛出NoClassDefFoundError&#xff0c;但类明明存在于classpath中。经过排查&#xff0c;发现是由于不同…

tauri2项目打开某个文件夹,类似于mac系统中的 open ./

在 Tauri 2 项目中打开文件夹 在 Tauri 2 项目中&#xff0c;你可以使用以下几种方法来打开文件夹&#xff0c;类似于 macOS 中的 open ./ 命令功能&#xff1a; 方法一&#xff1a;使用 shell 命令 use tauri::Manager;#[tauri::command] async fn open_folder(path: Strin…

企业文件乱、传输慢?用群晖 NAS 构建安全高效的共享系统

在信息化办公不断加速的今天&#xff0c;企业对文件存储、共享与安全管理的需求愈发严苛。传统文件共享方式效率低下、权限混乱、远程访问困难&#xff0c;极大影响了协同办公效率。此时&#xff0c;一套可靠、高效、安全的文件共享解决方案便成为众多企业的“刚需”。 这正是…

防爆手机VS普通手机,区别在哪里?

在加油站掏出手机接打电话、在化工厂车间随手拍照记录……这些看似寻常的行为&#xff0c;实则暗藏致命风险。普通手机在易燃易爆环境中可能成为“隐形炸弹”&#xff0c;而防爆手机却能安全护航。这两者看似相似&#xff0c;实则从底层基因到应用场景都存在着本质差异&#xf…

在RTX5060Ti上进行Qwen3-4B的GRPO强化微调

导语 最近赶上618活动&#xff0c;将家里的RTX 4060显卡升级为了RTX 5060Ti 16GB版本&#xff0c;显存翻了一番&#xff0c;可以进行一些LLM微调实验了&#xff0c;本篇博客记录使用unsloth框架在RTX 5060Ti 16GB显卡上进行Qwen3-4B-Base模型的GRPO强化微调实验。 简介 GPU性…

武汉火影数字VR大空间制作

VR大空间是一种利用空旷的物理空间&#xff0c;结合先进的虚拟现实技术&#xff0c;让用户能够在其中自由移动并深度体验虚拟世界的创新项目方式。 在科技飞速发展的当下&#xff0c;VR大空间正以其独特的魅力&#xff0c;成为科技与娱乐领域的耀眼新星&#xff0c;掀起了一股沉…