Files
chunyu_project/learn/management/commands/populate_all_content.py
T
2026-08-05 23:59:15 +08:00

1311 lines
25 KiB
Python
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.
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
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>页面标题</title>
</head>
<body>
<h1>欢迎来到我的网页</h1>
<p>这是一个段落。</p>
</body>
</html>
```
## 常用标签
| 标签 | 说明 |
|------|------|
| `<h1>` ~ `<h6>` | 标题标签 |
| `<p>` | 段落标签 |
| `<a>` | 链接标签 |
| `<img>` | 图片标签 |
| `<div>` | 块级容器 |
| `<span>` | 行内容器 |
## 动手练习
尝试创建一个包含标题、段落和个人简介的简单网页。
""",
"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 = "<h1>Hello</h1><p>World</p>"
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
<form action="/submit" method="post">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<input type="email" name="email" placeholder="邮箱">
<select name="city">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
</select>
<button type="submit">提交</button>
</form>
```
## 多媒体标签
```html
<img src="image.jpg" alt="图片描述">
<video src="video.mp4" controls></video>
<audio src="audio.mp3" controls></audio>
```
## 语义化标签
| 标签 | 说明 |
|------|------|
| `<header>` | 页面头部 |
| `<nav>` | 导航栏 |
| `<main>` | 主内容区 |
| `<footer>` | 页脚 |
## 动手练习
1. 制作用户注册表单
2. 在页面中插入图片和视频
3. 使用语义化标签重构页面
""",
"Java 基础回顾": """# Java 基础回顾
## 学习目标
- 复习 Java 语法基础
- 掌握面向对象特性
- 熟悉集合框架
## Java 简介
Java 是一种面向对象的跨平台编程语言,广泛应用于企业级开发。
## 基本语法
```java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
```
## 数据类型
```java
int age = 25; // 整数
double price = 99.9; // 浮点数
String name = "Tom"; // 字符串
boolean isActive = true; // 布尔
int[] numbers = {1, 2, 3}; // 数组
```
## 面向对象
```java
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public void study() {
System.out.println(name + " is studying");
}
}
```
## 动手练习
1. 创建学生类并实现方法
2. 使用 ArrayList 存储数据
3. 实现继承和多态
""",
"Spring Boot 入门": """# Spring Boot 入门
## 学习目标
- 了解 Spring Boot 框架
- 掌握项目创建方法
- 学会创建 REST API
## Spring Boot 简介
Spring Boot 是简化 Spring 应用开发的框架,提供自动配置和快速启动能力。
## 创建项目
使用 [Spring Initializr](https://start.spring.io/) 创建项目,选择:
- Maven
- Java 17
- Spring Web 依赖
## 第一个 Controller
```java
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
```
## 项目结构
```
src/
├── main/
│ ├── java/com/example/demo/
│ │ ├── DemoApplication.java
│ │ └── controller/
│ └── resources/
│ └── application.properties
```
## 动手练习
1. 创建 Spring Boot 项目
2. 实现一个简单的 REST API
3. 使用 Postman 测试接口
""",
"MySQL 数据库设计": """# MySQL 数据库设计
## 学习目标
- 掌握 SQL 基础语法
- 理解数据库设计原则
- 学会建表和查询
## SQL 基础
```sql
-- 创建数据库
CREATE DATABASE mydb;
-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 插入数据
INSERT INTO users (name, email) VALUES ('Tom', 'tom@example.com');
-- 查询数据
SELECT * FROM users WHERE name LIKE '%T%';
```
## 表关系
- 一对一 (One-to-One)
- 一对多 (One-to-Many)
- 多对多 (Many-to-Many)
## 动手练习
1. 设计博客系统的数据库
2. 创建用户和文章表
3. 编写复杂查询语句
""",
"RESTful API 开发": """# RESTful API 开发
## 学习目标
- 理解 REST 架构风格
- 掌握 API 设计规范
- 学会使用 Spring Boot 开发 API
## REST 设计规范
| HTTP 方法 | 路径 | 说明 |
|-----------|------|------|
| GET | /users | 获取用户列表 |
| GET | /users/{id} | 获取单个用户 |
| POST | /users | 创建用户 |
| PUT | /users/{id} | 更新用户 |
| DELETE | /users/{id} | 删除用户 |
## 实现示例
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping
public List<User> getAllUsers() {
return userService.findAll();
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}
```
## 动手练习
1. 设计一套完整的 RESTful API
2. 实现 CRUD 操作
3. 添加参数校验和异常处理
""",
"JWT 认证与授权": """# JWT 认证与授权
## 学习目标
- 理解 JWT 原理
- 掌握 Spring Security 配置
- 学会实现认证和授权
## JWT 简介
JWT (JSON Web Token) 是一种无状态的认证机制,由 Header、Payload、Signature 三部分组成。
## Spring Security 配置
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) {
http.csrf().disable()
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/auth/**").permitAll()
.anyRequest().authenticated()
);
return http.build();
}
}
```
## JWT 工具类
```java
public class JwtUtils {
private static final String SECRET = "your-secret-key";
public static String generateToken(String username) {
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + 86400000))
.signWith(SignatureAlgorithm.HS256, SECRET)
.compact();
}
}
```
## 动手练习
1. 实现用户登录接口
2. 添加 JWT 过滤器
3. 实现基于角色的权限控制
""",
"Vue 3 组合式 API": """# Vue 3 组合式 API
## 学习目标
- 理解 Options API vs Composition API
- 掌握 setup 语法
- 学会使用响应式 API
## Composition API 简介
Composition API 是 Vue 3 推荐的编写方式,使用函数组合替代选项式配置。
## 基础用法
```vue
<script setup>
import { ref, computed, onMounted } from 'vue'
const count = ref(0)
const doubled = computed(() => count.value * 2)
function increment() {
count.value++
}
onMounted(() => {
console.log('组件已挂载')
})
</script>
<template>
<button @click="increment">{{ count }} × 2 = {{ doubled }}</button>
</template>
```
## 常用 API
| API | 说明 |
|-----|------|
| `ref()` | 响应式变量 |
| `reactive()` | 响应式对象 |
| `computed()` | 计算属性 |
| `watch()` | 监听器 |
| `onMounted()` | 挂载后 |
## 动手练习
1. 使用 Composition API 实现计数器
2. 创建待办事项列表
3. 使用 watch 监听数据变化
""",
"TypeScript 基础": """# TypeScript 基础
## 学习目标
- 理解 TypeScript 的优势
- 掌握类型注解
- 学会接口和泛型
## TypeScript 简介
TypeScript 是 JavaScript 的超集,添加了静态类型系统。
## 类型注解
```typescript
let name: string = "Tom"
let age: number = 25
let isActive: boolean = true
let hobbies: string[] = ["coding", "reading"]
```
## 接口
```typescript
interface User {
id: number
name: string
email?: string // 可选属性
}
function printUser(user: User) {
console.log(user.name)
}
```
## 泛型
```typescript
function identity<T>(arg: T): T {
return arg
}
const result = identity<string>("Hello")
```
## 动手练习
1. 为变量添加类型注解
2. 定义用户接口
3. 使用泛型创建通用函数
""",
"Pinia 状态管理": """# Pinia 状态管理
## 学习目标
- 了解状态管理必要性
- 掌握 Pinia 基本用法
- 学会模块化管理
## Pinia 简介
Pinia 是 Vue 3 官方推荐的状态管理库,替代 Vuex。
## 定义 Store
```typescript
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0
}),
getters: {
doubled: (state) => state.count * 2
},
actions: {
increment() {
this.count++
}
}
})
```
## 使用 Store
```vue
<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
</script>
<template>
<button @click="counter.increment">
{{ counter.count }} × 2 = {{ counter.doubled }}
</button>
</template>
```
## 动手练习
1. 创建用户状态 Store
2. 实现登录状态管理
3. 使用持久化插件
""",
"Vue Router 路由": """# Vue Router 路由
## 学习目标
- 掌握路由配置
- 学会路由导航
- 理解路由守卫
## 路由配置
```typescript
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(),
routes: [
{ path: '/', component: () => import('./Home.vue') },
{ path: '/about', component: () => import('./About.vue') },
{ path: '/user/:id', component: () => import('./User.vue') }
]
})
```
## 编程式导航
```typescript
import { useRouter } from 'vue-router'
const router = useRouter()
router.push('/about')
router.push({ name: 'user', params: { id: '123' } })
```
## 路由守卫
```typescript
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !isLoggedIn()) {
next('/login')
} else {
next()
}
})
```
## 动手练习
1. 配置嵌套路由
2. 实现面包屑导航
4. 添加登录守卫
""",
"项目实战:后台管理系统": """# 项目实战:后台管理系统
## 学习目标
- 综合运用 Vue 3 + TypeScript
- 掌握组件化开发
- 学会项目结构设计
## 技术栈
- Vue 3 + TypeScript
- Element Plus
- Pinia
- Vue Router
- Axios
## 项目结构
```
src/
├── api/ # 接口请求
├── components/ # 公共组件
├── views/ # 页面视图
├── stores/ # 状态管理
├── router/ # 路由配置
└── utils/ # 工具函数
```
## 核心功能
1. 用户登录认证
2. 权限管理
3. 数据统计图表
4. CRUD 操作
## 动手练习
1. 搭建项目脚手架
2. 实现登录页面
3. 开发用户管理模块
""",
}
MATERIALS_SAMPLE = [
{"title": "课程源代码", "file_type": "code", "file_size": 102400},
{"title": "练习题答案", "file_type": "pdf", "file_size": 512000},
{"title": "课程思维导图", "file_type": "pdf", "file_size": 204800},
]
class Command(BaseCommand):
help = '为所有课程章节填充示例视频、文档和配套资料'
def handle(self, *args, **options):
self.stdout.write("开始为课程填充内容...\n")
# 1. 为所有章节添加视频
self._populate_videos()
# 2. 为所有章节添加文档内容
self._populate_content()
# 3. 为所有章节添加配套资料
self._populate_materials()
self.stdout.write(self.style.SUCCESS("\n✅ 所有内容填充完成!"))
def _populate_videos(self):
"""为所有章节添加示例视频"""
chapters = Chapter.objects.filter(video_url='')
count = chapters.update(video_url=SAMPLE_VIDEO_URL, video_source='bilibili')
self.stdout.write(self.style.SUCCESS(f"📹 已添加视频: {count} 个章节"))
def _populate_content(self):
"""为所有章节添加文档内容"""
chapters = Chapter.objects.all()
count = 0
for chapter in chapters:
content = CHAPTER_CONTENT_MAP.get(chapter.title)
if not content:
content = self._generate_content(chapter)
obj, created = ChapterContent.objects.update_or_create(
chapter=chapter,
defaults={'content_md': content, 'content_html': content}
)
if created:
count += 1
self.stdout.write(self.style.SUCCESS(f"📄 已添加文档: {count} 个章节"))
def _populate_materials(self):
"""为所有章节添加配套资料"""
chapters = Chapter.objects.all()
count = 0
for chapter in chapters:
existing = CourseMaterial.objects.filter(chapter=chapter).count()
if existing >= 3:
continue
for mat in MATERIALS_SAMPLE:
CourseMaterial.objects.create(
chapter=chapter,
title=mat["title"],
file_type=mat["file_type"],
file_size=mat["file_size"],
)
count += 1
self.stdout.write(self.style.SUCCESS(f"📦 已添加资料: {count} 条记录"))
def _generate_content(self, chapter):
"""为没有预设内容的章节生成通用文档"""
course_name = chapter.course.title
return f"""# {chapter.title}
## 学习目标
- 掌握 {chapter.title} 的核心概念
- 能够运用所学知识解决实际问题
- 培养独立思考和动手能力
## 前言
本章是《{course_name}》课程的重要组成部分。通过本章学习,你将掌握相关技术在实际开发中的应用。
## 核心知识点
### 1. 基本概念
理解本章涉及的基本术语和概念是学习的第一步。
### 2. 实践应用
通过实际案例演示知识点的应用场景。
### 3. 最佳分享
分享开发中的最佳实践和注意事项。
## 代码示例
```python
# 本章示例代码
def example():
print("Hello, {chapter.title}!")
example()
```
## 动手练习
1. 阅读本章内容并理解核心概念
2. 完成课后练习题
3. 尝试独立编写一个小项目
"""