小熊英语学习平台 - 项目完整分析文档

我是一名编程技术博主,同时也是一名Python老师。在日常教学中,我为孩子们进行Python技术内容教学,帮助同学们更好地掌握编程技能。

最近,有几位学生的家长和我交流,提到孩子的英语成绩不太理想。作为一名教育工作者,我深知英语能力对于日常以及编程学习的重要性——除了在学校文化课外,很多优质的技术文档、开源项目和编程资源都是英文的。于是,我萌生了开发这个英语学习网站的想法。

这个平台专为我的编程学生们打造,旨在通过系统化的学习路径和有趣的互动方式,帮助大家在学习编程的同时,同步提升英语水平。网站包含单词学习、打字练习、翻译挑战、句子训练和每日阅读等多个模块,希望能为同学们打开一扇通往英语世界的大门。

一、项目概述

1.1 项目架构

EnglishiLearnning/
├── EnglishiLearnning/          # Django项目配置
│   ├── settings.py             # 配置文件(MySQL、模板、静态文件)
│   ├── urls.py                 # URL路由配置
│   └── wsgi.py                 # WSGI服务器入口
├── MyApp/                      # 核心应用模块
│   ├── models.py               # 数据库模型定义
│   ├── views.py                # 业务逻辑与API接口
│   ├── admin.py                # 后台管理配置
│   └── migrations/             # 数据库迁移文件
├── templates/                  # 前端模板(7个页面)
├── static/                     # 静态资源(图片等)
└── manage.py                   # Django管理命令入口

1.2 技术栈

层次 技术 版本
后端框架 Django 5.0
数据库 MySQL 5.7+
前端框架 原生HTML/CSS/JS -
图标库 Font Awesome 6.4.0
后台管理 SimpleUI -

二、功能模块详解

2.1 模块总览

模块 路径 功能描述 状态
单词汇总 /words/ 单词浏览、分类、收藏、标记已会 已完成
打字练习 /typing-game/ 单词打字游戏、排行榜 已完成
单词翻译官 /translation-game/ 中文翻译英文游戏 已完成
句子训练 /sentence/ 句子填空练习、学习统计 已完成
每日一读 /week_read/ 英文文章阅读、评论互动 已完成
个人中心 /profile/ 用户信息、学习数据汇总 已完成
用户认证 /login/ /register/ 用户注册、登录、登出 已完成

2.2 模块1:单词汇总

功能说明:浏览单词卡片、按分类筛选、搜索单词、收藏/标记已会

核心代码MyApp/views.py:247-317):

def word_list(request):
    # 获取分类和搜索参数
    categories = WordCategory.objects.all()
    category_id = request.GET.get('category')
    search_query = request.GET.get('search', '')
    
    # 过滤单词
    words = Word.objects.all()
    if category_id and category_id != 'all':
        words = words.filter(category_id=category_id)
    if search_query:
        words = words.filter(
            Q(word_content__icontains=search_query) |
            Q(chinese_definition__icontains=search_query)
        )
    
    # 分页处理
    paginator = Paginator(words, 20)
    page_obj = paginator.get_page(request.GET.get('page', 1))
    
    return render(request, 'word_cards.html', {
        'words': page_obj,
        'categories': categories,
        'user_is_authenticated': True if request.session.get('user_id') else False
    })

在这里插入图片描述


2.3 模块2:打字练习

功能说明:随机单词打字游戏,记录得分、准确率、速度

核心APIMyApp/views.py:827-870):

@csrf_exempt
def save_game_record(request):
    user_id = request.session.get('user_id')
    if not user_id:
        return JsonResponse({'success': False, 'message': '请先登录'})
    
    data = json.loads(request.body)
    record = TypingGameRecord(
        user=User.objects.get(id=user_id),
        score=data.get('score', 0),
        hits=data.get('hits', 0),
        total_words=data.get('total_words', 0),
        game_duration=data.get('game_duration', 0)
    )
    record.save()  # 自动计算准确率和WPM
    return JsonResponse({'success': True})

在这里插入图片描述
在这里插入图片描述


2.4 模块3:单词翻译官

功能说明:中文提示选择英文单词,随机20题,实时反馈

核心逻辑MyApp/views.py:985-1069):

def get_translation_questions(request):
    # 随机选择20个单词
    all_words = list(Word.objects.all().select_related('category'))
    selected_words = random.sample(all_words, min(20, len(all_words)))
    
    questions = []
    for word in selected_words:
        # 生成5个干扰项
        distractors = random.sample(
            [w for w in all_words if w.id != word.id], 
            min(5, len(all_words) - 1)
        )
        
        # 打乱选项顺序
        options = [word] + distractors
        random.shuffle(options)
        
        questions.append({
            'question_id': word.id,
            'chinese_prompt': word.chinese_definition,
            'correct_answer': word.word_content,
            'options': options
        })
    
    # 存储到session用于验证
    request.session['game_questions'] = questions
    return JsonResponse({'success': True, 'questions': questions})

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.5 模块4:句子训练

功能说明:英语句子挖空填空练习,记录答题统计

核心代码MyApp/views.py:1510-1688):

@csrf_exempt
def check_sentence_answer(request):
    data = json.loads(request.body)
    sentence_id = data.get('sentence_id')
    selected_answer = data.get('selected_answer')
    
    # 验证答案
    sentence = get_object_or_404(SentenceExercise, id=sentence_id)
    is_correct = (selected_answer == sentence.correct_answer)
    
    # 更新用户统计(登录用户)
    user_id = request.session.get('user_id')
    if user_id:
        user_stats, _ = UserLearningStats.objects.get_or_create(user_id=user_id)
        user_stats.total_sentences_attempted += 1
        if is_correct:
            user_stats.correct_sentences += 1
            user_stats.current_streak += 1
        else:
            user_stats.current_streak = 0
        user_stats.save()
    
    return JsonResponse({
        'success': True,
        'is_correct': is_correct,
        'correct_answer': sentence.correct_answer
    })

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.6 模块5:每日一读

功能说明:精选英文文章阅读、中文翻译对照、评论互动

核心代码MyApp/views.py:1886-1961):

@csrf_exempt
def get_articles(request):
    # 获取筛选参数
    category_id = request.GET.get('category')
    difficulty = request.GET.get('difficulty')
    
    # 过滤文章
    articles = Article.objects.filter(is_published=True)
    if category_id and category_id != 'all':
        articles = articles.filter(category_id=category_id)
    if difficulty and difficulty != 'all':
        articles = articles.filter(difficulty=difficulty)
    
    # 分页处理
    paginator = Paginator(articles, 10)
    page_obj = paginator.get_page(request.GET.get('page', 1))
    
    return JsonResponse({
        'success': True,
        'articles': [{'id': a.id, 'title': a.title, ...} for a in page_obj],
        'total_pages': paginator.num_pages
    })

在这里插入图片描述
在这里插入图片描述


2.7 模块6:个人中心

功能说明:用户信息展示、学习统计汇总、错误记录查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


2.8 模块7:用户认证

功能说明:注册、登录、登出功能

核心代码MyApp/views.py:21-70):

@csrf_exempt
def login_user(request):
    data = json.loads(request.body)
    username = data.get('username', '').strip()
    
    try:
        user = User.objects.get(username=username)
        if not user.is_active:
            return JsonResponse({'success': False, 'message': '账户已被禁用'})
        
        # 存储到session
        request.session['user_id'] = user.id
        request.session['username'] = user.username
        
        return JsonResponse({
            'success': True,
            'user_id': user.id,
            'username': user.username
        })
    except User.DoesNotExist:
        return JsonResponse({'success': False, 'message': '用户名不存在'})

在这里插入图片描述
在这里插入图片描述


三、数据库模型关系

3.1 ER图结构

┌───────────┐      ┌──────────────┐      ┌─────────┐
│   User    │──────│UserWordFavorite│──────│  Word   │
│ (用户)    │1:N   │ (用户单词收藏) │N:1   │  (单词) │
└───────────┘      └──────────────┘      └────┬────┘
    │                                        │
    │                                        │N:1
    │      ┌───────────────┐                 │
    └──────│UserWordMastered│────────────────┘
           │ (用户已会单词) │
           └───────────────┘

┌───────────┐      ┌───────────────┐      ┌───────────────┐
│   User    │──────│UserLearningStats│──────│SentenceExercise│
│ (用户)    │1:1   │  (用户学习统计)  │      │  (句子训练题目) │
└───────────┘      └───────────────┘      └───────────────┘
    │                                           │
    │1:N                                        │N:1
    │                                           │
    └──────┬────────────────────────────────────┘
           │
    ┌──────┴──────┐
    │UserSentenceProgress│
    │  (句子训练进度)   │
    └───────────────────┘

┌───────────┐      ┌───────────────────┐      ┌──────────┐
│   User    │──────│UserReadingProgress│──────│ Article  │
│ (用户)    │1:N   │   (用户阅读进度)    │N:1   │  (文章)   │
└───────────┘      └───────────────────┘      └────┬─────┘
    │                                              │
    │1:1                                           │1:N
    │                                              │
    └──────┬───────────────────────────────────────┘
           │
    ┌──────┴────────┐
    │UserReadingStat│
    │  (用户阅读统计)│
    └───────────────┘

3.2 核心模型字段

模型 关键字段 说明
User username, email, gender, age, city 用户基本信息
Word word_content, chinese_definition, english_example, difficulty_level 单词数据
WordCategory category_name, icon, icon_color 单词分类
UserWordFavorite user_id, word_id 用户收藏关系
UserWordMastered user_id, word_id 用户已会关系
TypingGameRecord user_id, score, hits, accuracy, words_per_minute 打字游戏记录
SentenceExercise english_sentence, translation, correct_answer, options 句子训练题目
UserLearningStats total_sentences_attempted, correct_sentences, current_streak 句子训练统计
Article title, english_content, chinese_translation, difficulty 阅读文章
ArticleComment user_id, article_id, content 文章评论
UserReadingStat total_articles_read, current_streak, total_words_learned 阅读统计

四、API接口汇总

4.1 用户认证接口

接口 方法 功能
/api/register/ POST 用户注册
/api/login/ POST 用户登录
/api/logout/ POST 用户登出
/api/user/ GET 获取当前用户

4.2 单词相关接口

接口 方法 功能
/api/words/categories/ GET 获取单词分类
/api/words/all/ GET 获取所有单词
/api/words/category/{id}/ GET 获取分类单词
/api/words/search/ GET 搜索单词
/api/words/favorite-toggle/ POST 收藏/取消收藏
/api/words/mastered-toggle/ POST 标记/取消已会

4.3 打字游戏接口

接口 方法 功能
/api/game/words/ GET 获取游戏单词
/api/game/save-record/ POST 保存游戏记录
/api/game/stats/ GET 获取用户统计
/api/game/leaderboard/ GET 获取排行榜

4.4 翻译游戏接口

接口 方法 功能
/api/translation-game/questions/ GET 获取题目列表
/api/translation-game/submit/ POST 提交答案
/api/translation-game/result/ GET 获取结果

4.5 句子训练接口

接口 方法 功能
/api/sentences/ GET 获取句子题目
/api/sentences/check-answer/ POST 检查答案
/api/sentences/user-stats/ GET 获取用户统计

4.6 每日阅读接口

接口 方法 功能
/api/articles/ GET 获取文章列表
/api/articles/{id}/ GET 获取文章详情
/api/article-categories/ GET 获取文章分类
/api/mark-article-completed/ POST 标记已读
/api/articles/{id}/comments/ GET 获取评论
/api/articles/comments/ POST 发表评论
/api/user-reading-stats/ GET 获取阅读统计

4.7 个人中心接口

接口 方法 功能
/api/user/profile/ GET 获取用户信息
/api/user/update/ POST 更新用户信息
/api/user/errors/ GET 获取错误记录

五、模板文件结构

模板文件 对应页面 功能描述
word_cards.html 单词汇总 单词卡片展示、分类筛选、搜索
keyboard_practice.html 打字练习 打字游戏界面、计时器、得分显示
word_translate.html 单词翻译官 翻译题目展示、选项选择、结果反馈
sentence.html 句子训练 句子填空、选项选择、学习统计
week_read.html 每日一读 文章展示、评论区、阅读统计
profile.html 个人中心 用户信息、学习数据汇总
login.html 登录页面 登录表单
register.html 注册页面 注册表单

六、配置文件关键信息

6.1 数据库配置(settings.py:79-93

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'EnglishLearning',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {'charset': 'utf8mb4'}
    }
}

6.2 静态文件配置(settings.py:130-132

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

七、截图位置汇总表

截图编号 对应模块 页面路径 主要内容
[截图1-单词汇总页面] 单词汇总 /words/ 单词卡片网格、分类导航、搜索框
[截图2-打字练习页面] 打字练习 /typing-game/ 打字输入区、计时器、得分显示
[截图3-单词翻译官页面] 单词翻译官 /translation-game/ 中文提示、选项按钮、答题进度
[截图4-句子训练页面] 句子训练 /sentence/ 挖空句子、选项、统计面板
[截图5-每日一读页面] 每日一读 /week_read/ 文章内容、翻译区、评论区
[截图6-个人中心页面] 个人中心 /profile/ 用户信息、学习统计图表
[截图7-登录/注册页面] 用户认证 /login/ /register/ 登录/注册表单

八、项目特色亮点

  1. 完整的学习闭环:单词学习 → 句子训练 → 文章阅读,循序渐进
  2. 游戏化学习:打字游戏、翻译游戏、句子填空,增加趣味性
  3. 用户数据追踪:收藏、已会标记、学习统计、连续打卡
  4. 互动社区:文章评论功能,增强用户粘性
  5. 响应式设计:适配移动端和桌面端
  6. 励志激励系统:答题完成后显示励志句子

九、部署说明

9.1 环境要求

  • Python 3.10+
  • Django 5.0+
  • MySQL 8.0+
  • 依赖安装:pip install django simpleui mysqlclient

9.2 启动步骤

# 1. 创建数据库
mysql -u root -p -e "CREATE DATABASE EnglishLearning CHARACTER SET utf8mb4;"

# 2. 执行数据库迁移
python manage.py makemigrations
python manage.py migrate

# 3. 启动开发服务器
python manage.py runserver 0.0.0.0:8000

9.3 访问地址

  • 前端首页:http://localhost:8000/
  • 后台管理:http://localhost:8000/admin/

以上是小熊英语学习平台的完整项目分析,包含架构设计、核心代码、数据库模型、API接口等关键信息。如需深入了解某个模块的具体实现,可以进一步探讨。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐