import os
from django.core.management.base import BaseCommand
from learn.models import Course, Chapter, ChapterContent, CourseMaterial
SAMPLE_VIDEO_URL = "https://www.bilibili.com/video/BV1uv411q7Mv"
CHAPTER_CONTENT_MAP = {
"HTML 基础结构": """# HTML 基础结构
## 学习目标
- 理解 HTML 的作用和基本概念
- 掌握 HTML 文档的基本结构
- 熟悉常用的 HTML 标签
## 什么是 HTML?
HTML(HyperText Markup Language)是一种用于创建网页的标记语言。它使用标签来描述网页的结构和内容。
## HTML 文档结构
```html
页面标题
欢迎来到我的网页
这是一个段落。
```
## 常用标签
| 标签 | 说明 |
|------|------|
| `` ~ `` | 标题标签 |
| `
` | 段落标签 |
| `` | 链接标签 |
| `
` | 图片标签 |
| `` | 块级容器 |
| `
` | 行内容器 |
## 动手练习
尝试创建一个包含标题、段落和个人简介的简单网页。
""",
"Python 简介与环境搭建": """# Python 简介与环境搭建
## 学习目标
- 了解 Python 语言特点
- 掌握 Python 安装方法
- 学会使用 IDLE 和命令行
## Python 简介
Python 是一种**解释型、高级、面向对象**的编程语言,由 Guido van Rossum 于 1991 年创建。
### 为什么选择 Python?
1. **简单易学** - 语法接近自然语言
2. **应用广泛** - Web开发、数据分析、人工智能
3. **社区活跃** - 丰富的第三方库
4. **跨平台** - Windows、macOS、Linux 通用
## 安装 Python
### Windows 安装步骤
1. 访问 [python.org](https://www.python.org/)
2. 下载最新版本 Python 3.x
3. 安装时勾选 **"Add Python to PATH"**
4. 点击 Install Now
### 验证安装
打开命令行输入:
```bash
python --version
```
## 第一个 Python 程序
```python
print("Hello, World!")
print("你好,Python!")
```
## 动手练习
1. 安装 Python 环境
2. 运行 `print("Hello, World!")`
3. 尝试使用不同的 print 输出
""",
"变量与数据类型": """# 变量与数据类型
## 学习目标
- 理解变量的概念
- 掌握 Python 的基本数据类型
- 学会使用 type() 函数
## 什么是变量?
变量是用于存储数据的容器。Python 中的变量不需要声明类型,直接赋值即可创建。
```python
name = "小明" # 字符串
age = 25 # 整数
height = 1.75 # 浮点数
is_student = True # 布尔值
```
## 基本数据类型
| 类型 | 说明 | 示例 |
|------|------|------|
| `int` | 整数 | `42`, `-10` |
| `float` | 浮点数 | `3.14`, `-0.5` |
| `str` | 字符串 | `"Hello"` |
| `bool` | 布尔值 | `True`, `False` |
| `list` | 列表 | `[1, 2, 3]` |
| `dict` | 字典 | `{"name": "Tom"}` |
## 类型转换
```python
x = int("10") # 字符串转整数
y = str(42) # 整数转字符串
z = float("3.14") # 字符串转浮点数
```
## 动手练习
1. 创建不同类型的变量
2. 使用 type() 查看变量类型
3. 练习类型转换
""",
"条件判断与循环": """# 条件判断与循环
## 学习目标
- 掌握 if-elif-else 条件判断
- 学会使用 for 循环
- 掌握 while 循环
## 条件判断
```python
age = 18
if age < 18:
print("未成年人")
elif age < 60:
print("成年人")
else:
print("老年人")
```
## for 循环
```python
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 使用 range
for i in range(5):
print(i) # 输出 0, 1, 2, 3, 4
```
## while 循环
```python
count = 0
while count < 5:
print(count)
count += 1
```
## 循环控制
- `break` - 跳出循环
- `continue` - 跳过当前迭代
## 动手练习
1. 编写程序判断奇偶数
2. 使用循环打印乘法表
3. 计算 1 到 100 的和
""",
"函数与模块": """# 函数与模块
## 学习目标
- 理解函数的作用
- 掌握函数的定义和调用
- 了解模块的使用
## 定义函数
```python
def greet(name):
'''打招呼函数'''
return f"你好,{name}!"
# 调用函数
message = greet("小明")
print(message) # 输出:你好,小明!
```
## 参数类型
```python
# 默认参数
def power(base, exponent=2):
return base ** exponent
print(power(3)) # 9
print(power(2, 3)) # 8
```
## 导入模块
```python
import math
print(math.sqrt(16)) # 4.0
from random import randint
print(randint(1, 100))
```
## 动手练习
1. 编写计算圆面积的函数
2. 创建判断素数的函数
3. 使用 math 模块进行数学计算
""",
"列表与字典": """# 列表与字典
## 学习目标
- 掌握列表的操作方法
- 理解字典的键值对结构
- 学会遍历和推导式
## 列表 (List)
```python
numbers = [1, 2, 3, 4, 5]
numbers.append(6) # 添加元素
numbers.pop() # 移除最后一个
numbers[0] # 索引访问
numbers[1:3] # 切片
```
## 字典 (Dict)
```python
student = {
"name": "小明",
"age": 20,
"grade": "A"
}
print(student["name"]) # 访问值
student["age"] = 21 # 修改值
```
## 列表推导式
```python
squares = [x**2 for x in range(10)]
evens = [x for x in range(10) if x % 2 == 0]
```
## 动手练习
1. 创建学生成绩列表并排序
2. 使用字典存储书籍信息
3. 使用推导式生成斐波那契数列
""",
"面向对象编程": """# 面向对象编程
## 学习目标
- 理解类和对象的概念
- 掌握类的定义和使用
- 了解继承和多态
## 定义类
```python
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
return f"{self.name} 汪汪叫!"
# 创建对象
my_dog = Dog("旺财", 3)
print(my_dog.bark())
```
## 继承
```python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Cat(Animal):
def speak(self):
return f"{self.name} 喵喵叫!"
```
## 动手练习
1. 创建一个 BankAccount 类
2. 实现存款和取款方法
3. 使用继承创建不同类型的账户
""",
"文件操作与异常处理": """# 文件操作与异常处理
## 学习目标
- 掌握文件的读写操作
- 理解异常处理机制
- 学会使用 with 语句
## 文件读写
```python
# 写入文件
with open("test.txt", "w", encoding="utf-8") as f:
f.write("Hello World\n")
# 读取文件
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
```
## 异常处理
```python
try:
result = 10 / 0
except ZeroDivisionError:
print("不能除以零!")
finally:
print("执行完毕")
```
## 常见异常类型
| 异常类型 | 说明 |
|----------|------|
| `ValueError` | 值错误 |
| `TypeError` | 类型错误 |
| `FileNotFoundError` | 文件不存在 |
| `ZeroDivisionError` | 除零错误 |
## 动手练习
1. 读取 CSV 文件并统计数据
2. 使用异常处理保证程序健壮性
3. 实现日志记录功能
""",
"常用标准库": """# 常用标准库
## 学习目标
- 熟悉 Python 标准库
- 掌握 os、datetime、json 等模块
- 学会使用第三方库
## os 模块
```python
import os
print(os.getcwd()) # 当前目录
os.listdir(".") # 列出文件
os.path.exists("test.txt") # 判断文件是否存在
```
## datetime 模块
```python
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
```
## json 模块
```python
import json
data = {"name": "Tom", "age": 25}
json_str = json.dumps(data, ensure_ascii=False)
parsed = json.loads(json_str)
```
## 动手练习
1. 批量重命名文件
2. 计算日期差值
3. 解析 JSON 配置文件
""",
"项目实战:爬虫入门": """# 项目实战:爬虫入门
## 学习目标
- 了解爬虫的基本原理
- 掌握 requests 库的使用
- 学会使用 BeautifulSoup 解析 HTML
## 什么是爬虫?
爬虫是自动获取网页数据的程序,常用于数据采集、监控等场景。
## requests 库
```python
import requests
url = "https://api.github.com"
response = requests.get(url)
print(response.status_code)
print(response.json())
```
## BeautifulSoup 解析
```python
from bs4 import BeautifulSoup
html = "Hello
World
"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text) # Hello
```
## 注意事项
1. 遵守网站的 robots.txt
2. 控制请求频率
3. 不要爬取敏感数据
## 动手练习
1. 爬取天气数据显示在控制台
2. 获取豆瓣电影 Top 250
3. 制作每日新闻聚合器
""",
"CSS 选择器与样式": """# CSS 选择器与样式
## 学习目标
- 理解 CSS 的作用
- 掌握 CSS 选择器
- 学会使用常见样式属性
## CSS 语法
```css
选择器 {
属性名: 值;
属性名: 值;
}
```
## 选择器类型
| 选择器 | 说明 | 示例 |
|--------|------|------|
| 元素选择器 | 选中所有该元素 | `p { }` |
| 类选择器 | 选中 class 属性 | `.box { }` |
| ID 选择器 | 选中 id 属性 | `#header { }` |
| 后代选择器 | 选中后代元素 | `div p { }` |
## 常用属性
```css
.box {
color: #333;
font-size: 16px;
background-color: #f5f5f5;
padding: 10px;
margin: 5px;
border: 1px solid #ddd;
}
```
## 动手练习
1. 为之前的 HTML 页面添加样式
2. 使用不同选择器设置样式
3. 实现一个卡片组件
""",
"CSS 布局与响应式": """# CSS 布局与响应式
## 学习目标
- 掌握 Flexbox 布局
- 学会 Grid 布局
- 理解响应式设计
## Flexbox 布局
```css
.container {
display: flex;
justify-content: space-between;
align-items: center;
}
```
## Grid 布局
```css
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
```
## 响应式设计
```css
/* 移动端优先 */
.box { width: 100%; }
/* 平板 */
@media (min-width: 768px) {
.box { width: 50%; }
}
/* 桌面 */
@media (min-width: 1024px) {
.box { width: 33.33%; }
}
```
## 动手练习
1. 使用 Flexbox 实现导航栏
2. 使用 Grid 实现图片画廊
3. 制作响应式登录页面
""",
"JavaScript 基础语法": """# JavaScript 基础语法
## 学习目标
- 了解 JavaScript 的作用
- 掌握变量和数据类型
- 学会函数定义
## JavaScript 简介
JavaScript 是一种轻量级编程语言,用于网页交互开发。
## 变量声明
```javascript
let name = "小明"; // 可变变量
const PI = 3.14159; // 常量
// var 已不推荐使用
```
## 数据类型
```javascript
let str = "Hello"; // 字符串
let num = 42; // 数字
let bool = true; // 布尔
let arr = [1, 2, 3]; // 数组
let obj = { name: "Tom" }; // 对象
```
## 函数定义
```javascript
// 函数声明
function greet(name) {
return `你好,${name}!`;
}
// 箭头函数
const add = (a, b) => a + b;
```
## 动手练习
1. 声明不同类型的变量
2. 编写计算两数之和的函数
3. 使用箭头函数处理数组
""",
"DOM 操作与事件": """# DOM 操作与事件
## 学习目标
- 理解 DOM 树结构
- 掌握元素选择方法
- 学会事件处理
## 选择元素
```javascript
document.getElementById("header");
document.querySelector(".title");
document.querySelectorAll("p");
```
## 修改内容
```javascript
const el = document.querySelector("h1");
el.textContent = "新标题";
el.style.color = "red";
el.classList.add("active");
```
## 事件处理
```javascript
const btn = document.querySelector("button");
btn.addEventListener("click", function() {
console.log("按钮被点击了!");
});
```
## 常见事件
| 事件 | 说明 |
|------|------|
| `click` | 点击事件 |
| `mouseover` | 鼠标悬停 |
| `keydown` | 键盘按下 |
| `submit` | 表单提交 |
## 动手练习
1. 实现点击按钮改变背景色
2. 制作图片轮播效果
3. 实现表单验证功能
""",
"HTML 表单与多媒体": """# HTML 表单与多媒体
## 学习目标
- 掌握表单元素
- 学会插入图片和视频
- 理解语义化标签
## 表单元素
```html
```
## 多媒体标签
```html
```
## 语义化标签
| 标签 | 说明 |
|------|------|
| `` | 页面头部 |
| `