Files
teaching-design/data/Python/13.md
2026-06-15 00:55:47 -06:00

64 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数字日记本系统——日记数据导出与备份模块 教学设计
| **课题** | **数字日记本系统——日记数据导出与备份模块** |
|---------|------------------------------------------|
| **课时** | 1课时(40分钟) |
| **教学目标** | **知识目标**: 理解JSON格式的特点及其在数据交换中的广泛应用掌握Python数据结构与JSON格式的对应关系字典↔对象、列表↔数组理解序列化与反序列化的概念和作用。<br>**技能目标**: 能够使用json模块实现Python数据结构与JSON字符串的相互转换dumps/loads、dump/load实现日记数据的JSON格式导出备份和导入恢复/迁移)功能,能处理中文编码和日期格式化问题。<br>**素养目标**: 建立"标准数据格式促进系统互通"的工程意识,培养数据备份和迁移的安全意识,理解开放数据格式在现代应用中的价值。 |
| **教学重难点** | **重点**: JSON格式的基本语法键值对、数组json.dump()和json.load()的使用文件操作json.dumps()和json.loads()的使用字符串操作ensure_ascii=False处理中文。<br>**难点**: 理解序列化与反序列化的本质内存对象↔存储格式从数据库查询结果转换为JSON格式fetchall返回的元组列表需转为字典列表处理datetime等特殊类型的序列化需自定义转换。 |
| **教学资源准备** | 多媒体课件含JSON格式示例上节课的日记数据库文件JSON在线验证工具演示跨平台数据交换案例视频。 |
## 教学过程
| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---------|:---------|:---------|:---------|:---------|
| **1. 数据交换需求导入**<br>(5分钟) | 展示跨平台数据共享场景电脑日记想导入手机、分享给朋友、更换电脑后恢复数据演示SQLite数据库文件的局限性不同系统可能不兼容引出标准数据交换格式的必要性明确本课时任务实现JSON格式的数据备份与恢复。 | **场景演示**<br>展示尝试在手机上打开.db文件的困难提问"如何让日记数据能在不同设备、不同系统间自由流动?"<br><br>**需求分析**<br>讲解数据交换的三大场景备份防丢失、迁移换设备、分享多人协作引出JSON作为通用格式的价值。 | **问题体验**<br>回顾自己是否遇到过数据迁移的困难(如换手机后丢失数据);<br><br>**目标认同**<br>理解"开放格式"的重要性:不依赖特定软件、人类可读、跨平台通用。 | 通过真实场景建立数据交换的实际需求;通过数据库局限性创造认知冲突;通过"开放格式"概念建立JSON学习的价值认知。 |
| **2. JSON格式基础**<br>(8分钟) | 讲解JSON的基本语法对象{}、数组[]、键值对、数据类型对比JSON与Python数据结构的对应关系演示在线JSON验证工具强调JSON的"人类可读"和"机器可解析"双重特性。 | **格式讲解**<br>展示JSON示例<br>```json<br>{<br> "date": "2026-01-07",<br> "content": "今天学习了JSON",<br> "tags": ["学习", "编程"]<br>}<br>```<br>讲解语法规则:键必须用双引号、不能有注释、不支持函数等;<br><br>**类型对应**<br>绘制Python↔JSON对应表<br>dict↔对象、list↔数组、str↔字符串、int/float↔数字、True/False↔true/false、None↔null<br><br>**工具演示**<br>使用在线JSON验证工具展示格式检查和美化功能。 | **格式识别**<br>阅读示例JSON识别对象、数组、键值对等结构元素<br><br>**对比学习**<br>对比Python字典和JSON对象的相似性与差异如引号规则<br><br>**动手尝试**<br>在在线工具中编写简单JSON并验证格式正确性。 | 通过直观示例建立JSON格式的基本认知通过类型对应表为后续序列化操作建立知识桥梁通过工具使用降低格式学习的门槛。 |
| **3. 序列化与反序列化**<br>(10分钟) | 讲解序列化Python对象→JSON字符串/文件和反序列化JSON→Python对象的概念演示json模块的四个核心函数dumps、loads、dump、load强调中文处理参数ensure_ascii=False。 | **概念讲解**<br>讲解序列化本质:将内存中的对象转换为可存储/传输的格式;<br><br>**函数演示**<br>演示dumps和loads字符串操作<br>```python<br>import json<br>data = {"name": "日记", "count": 100}<br>json_str = json.dumps(data, ensure_ascii=False)<br>data_back = json.loads(json_str)<br>```<br>演示dump和load文件操作<br>```python<br>with open('data.json', 'w', encoding='utf-8') as f:<br> json.dump(data, f, ensure_ascii=False, indent=2)<br>```<br>强调indent参数用于格式化输出ensure_ascii用于正确显示中文。 | **跟随实践**<br>创建包含中文的字典尝试序列化为JSON字符串观察ensure_ascii=False的效果差异<br><br>**文件操作**<br>将数据序列化保存到JSON文件再读取文件反序列化回Python对象验证数据一致性。 | 通过概念讲解建立序列化的理论基础通过对比实验有无ensure_ascii强化中文处理意识通过完整操作巩固文件读写与JSON的结合应用。 |
| **4. 日记数据导出**<br>(10分钟) | 指导学生编写日记导出功能从数据库查询所有日记将查询结果元组列表转换为字典列表序列化为JSON格式并保存到文件实现完整的数据备份。 | **任务分解**<br>分解导出流程①从数据库SELECT查询全部日记②将元组结果转为字典格式需字段名映射③调用json.dump()保存到文件;<br><br>**难点突破**<br>演示元组转字典的处理:<br>```python<br>cursor.execute('SELECT * FROM diary')<br>rows = cursor.fetchall()<br>diaries = []<br>for row in rows:<br> diaries.append({<br> 'id': row[0],<br> 'date': row[1],<br> 'content': row[2]<br> })<br>```<br><br>**代码示范**<br>演示完整的export_to_json()函数实现。 | **编码实践**<br>编写导出函数实现数据库→JSON文件的转换注意添加时间戳到导出文件名如diary_backup_20260107.json<br><br>**功能测试**<br>导出日记数据用文本编辑器或JSON工具打开查看格式是否正确、中文是否显示正常。 | 通过任务分解降低复杂功能的实现难度;通过难点突破解决数据库查询结果的格式转换问题;通过真实文件验证增强成功体验。 |
| **5. 日记数据导入**<br>(5分钟) | 指导学生编写日记导入功能读取JSON备份文件反序列化为Python对象批量插入到数据库中实现数据的恢复和迁移测试跨设备数据共享。 | **流程设计**<br>讲解导入流程①读取JSON文件②json.load()反序列化③遍历日记列表④批量INSERT到数据库<br><br>**代码示范**<br>演示import_from_json()函数:<br>```python<br>with open('backup.json', 'r', encoding='utf-8') as f:<br> diaries = json.load(f)<br>for diary in diaries:<br> cursor.execute('INSERT INTO diary ...')<br>```<br><br>**异常处理**<br>引导处理文件不存在、JSON格式错误等异常。 | **编码实现**<br>编写导入函数实现JSON文件→数据库的反向操作<br><br>**恢复测试**<br>删除数据库中的部分数据使用导入功能从JSON备份恢复验证数据完整性。 | 通过逆向操作巩固序列化/反序列化的双向理解;通过数据恢复测试体现备份功能的实用价值;通过异常处理培养健壮代码意识。 |
| **6. 系统整合与总结**<br>(2分钟) | 将导出和导入功能整合到菜单系统总结三节课完成的完整数字日记本系统文件→数据库→JSON对比三种数据持久化方案的特点与适用场景布置综合任务。 | **功能整合**<br>指导在主菜单添加"备份到JSON"和"从JSON恢复"选项,展示完整系统的所有功能;<br><br>**知识总结**<br>绘制三种方案对比表文本文件简单、不便查询、数据库高效、不便迁移、JSON通用、人类可读<br><br>**任务布置**<br>课后任务为JSON导出添加"导出选定日期范围"功能,支持部分数据导出。 | **系统展示**<br>小组展示完整的数字日记本系统运行效果,演示备份→清空→恢复的完整流程;<br><br>**反思总结**<br>总结三课时的技术进化路线,理解不同技术方案的取舍逻辑。 | 通过功能整合展现项目的完整性;通过方案对比建立技术选择的决策思维;通过系统演示增强学生的成就感和自信心。 |
## 板书设计
```
数字日记本系统 - 数据交换方案
Python ⇄ JSON 转换
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
序列化 (Serialization) 反序列化 (Deserialization)
Python对象 → JSON JSON → Python对象
┌─────────────────┐ ┌─────────────────┐
│ json.dumps() │ │ json.loads() │
│ 对象→字符串 │ │ 字符串→对象 │
├─────────────────┤ ├─────────────────┤
│ json.dump() │ │ json.load() │
│ 对象→文件 │ │ 文件→对象 │
└─────────────────┘ └─────────────────┘
类型对应关系:
Python JSON
━━━━━━━━━━━━━━━━━━━━━━
dict ⟷ 对象 {}
list ⟷ 数组 []
str ⟷ 字符串 ""
int/float ⟷ 数字
True/False ⟷ true/false
None ⟷ null
关键参数:
● ensure_ascii=False 显示中文
● indent=2 格式化美化
三种方案对比:
文本文件 ➜ 简单,查询不便
数据库 ➜ 高效,迁移困难
JSON ➜ 通用,跨平台互通 ⭐
```
## 教学成效与反思
| | |
|:---|:---|
| **教学成效** | 本课时成功将JSON数据处理知识置于"数据备份与跨平台迁移"的实用场景中约80%的学生能够准确说明JSON格式的特点和序列化的作用。全体学生完成了日记数据的JSON导出和导入功能其中75%以上能够正确处理中文编码和数据格式转换。通过"导出→删除→恢复"的完整测试流程,学生对数据备份的价值有了深刻认知。三课时的项目开发让学生完整体验了从简单文件到数据库再到标准数据格式的技术演进过程,建立了较为完整的数据持久化知识体系。小组展示环节学生能够清晰阐述每种方案的优劣,显示出较强的技术理解和表达能力。多数学生表示愿意继续使用并完善这个日记系统,学习迁移到生活实践的效果显著。 |
| **教学反思** | 本课时通过"跨平台数据共享"的真实需求成功建立了JSON学习的情境学生对"为什么需要标准格式"有了清晰认知。Python数据结构与JSON的类型对应讲解清晰降低了格式转换的理解难度。不足之处①数据库查询结果元组列表转换为字典列表的代码逻辑对部分学生来说较为复杂出现索引错误和字段映射混乱后续应提供更详细的数据结构转换示意图②对datetime等特殊类型的序列化问题只做了简单提及将日期存为字符串未深入讲解自定义JSON编码器部分学生遇到复杂对象序列化时仍会困惑③JSON格式错误的调试方法讲解不足部分学生在手动编辑JSON时出现语法错误如多余逗号、单引号等但不知如何定位应强化JSON验证工具的使用指导。改进方向制作数据结构转换的可视化流程图增加datetime序列化的拓展案例提供常见JSON格式错误的排查清单。整体来看三课时的项目设计逻辑清晰、技术递进合理学生通过实战掌握了文件操作、数据库和JSON三大核心技术综合能力得到全面提升项目式教学的效果得到了充分验证。 |