教师教材编辑页面
This commit is contained in:
@@ -4,9 +4,11 @@ from .vscode import bp as vscode_bp
|
||||
from .auth import bp as auth_bp
|
||||
from .dashboard import bp as main_bp
|
||||
from .material import bp as material_bp
|
||||
from .lessons import bp as lessons_bp
|
||||
def register_blueprints(app: Flask):
|
||||
app.register_blueprint(markdown_bp) # 默认就是挂在根路径
|
||||
app.register_blueprint(vscode_bp)
|
||||
app.register_blueprint(auth_bp)
|
||||
app.register_blueprint(main_bp)
|
||||
app.register_blueprint(material_bp)
|
||||
app.register_blueprint(material_bp)
|
||||
app.register_blueprint(lessons_bp)
|
||||
41
Html/apps/views/lessons.py
Normal file
41
Html/apps/views/lessons.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# views/lesson.py
|
||||
from flask import Blueprint, jsonify, request, render_template, session, current_app
|
||||
from bson import ObjectId
|
||||
from datetime import datetime
|
||||
from ..auth.decorators import require_role
|
||||
from ..services.course_service import load_material
|
||||
|
||||
bp = Blueprint('lesson', __name__)
|
||||
|
||||
# 返回课时元信息(含三份 markdown 的可访问链接或直接内容)
|
||||
@bp.route('/api/materials/<material_id>/chapters/<chapter_name>/lessons/<lesson_name>', methods=['GET'])
|
||||
@require_role(roles="teacher")
|
||||
def edit_lesson_detail(material_id, chapter_name, lesson_name):
|
||||
teacher_uuid = session.get("user_uuid")
|
||||
teacher_id = current_app.extensions["uuid2username"][teacher_uuid]
|
||||
material = load_material(material_id)
|
||||
for chapter in material.chapters:
|
||||
if chapter.chapter_name == chapter_name:
|
||||
for lesson in chapter.lessons:
|
||||
if lesson.lesson_name == lesson_name:
|
||||
return render_template('lesson.html', lesson=lesson.model_dump(), role="teacher", material=material.model_dump())
|
||||
return jsonify({"message": "课时不存在"}), 404
|
||||
|
||||
# 返回某份 markdown 文件内容(你也可以直接返回 S3/OSS 的直链)
|
||||
@bp.route('/api/lesson_file/<material_id>/<chapter_name>/<lesson_name>/<filename>', methods=['GET'])
|
||||
def get_markdown_file(material_id, chapter_name, lesson_name, filename):
|
||||
# TODO: 真实环境从存储读取
|
||||
demo_map = {
|
||||
"lesson.md": "# 主题\n## 阶段一\n### 步骤A\n内容A...\n### 步骤B\n内容B...\n",
|
||||
"prompt.md": "# 主题\n## 阶段一\n### 步骤A\n提示A...\n### 步骤B\n提示B...\n",
|
||||
"score_prompt.md": "# 主题\n## 阶段一\n### 步骤A\n评分A...\n### 步骤B\n评分B...\n"
|
||||
}
|
||||
return demo_map.get(filename, ""), 200
|
||||
|
||||
# 保存(更新)某一份 markdown(前端会把编辑后的文本整体传回)
|
||||
@bp.route('/api/lesson_file/<material_id>/<chapter_name>/<lesson_name>/<filename>', methods=['PUT'])
|
||||
def save_markdown_file(material_id, chapter_name, lesson_name, filename):
|
||||
text = request.get_data(as_text=True)
|
||||
# TODO: 写入存储,并做版本/审计
|
||||
# 返回更新时间等
|
||||
return jsonify({"saved": True, "updated_at": datetime.utcnow().isoformat()}), 200
|
||||
@@ -1,5 +1,5 @@
|
||||
from flask import Blueprint, request, jsonify, current_app, session, render_template, session
|
||||
from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson
|
||||
from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson, delete_material_chapter_lesson
|
||||
from ..auth.decorators import require_role
|
||||
from ..services.cos_service import upload_file
|
||||
bp = Blueprint('material', __name__)
|
||||
@@ -79,6 +79,18 @@ def add_lesson(material_id):
|
||||
return jsonify({"message": "课时添加成功"}), 200
|
||||
return jsonify({"message": "课时添加失败"}), 404
|
||||
|
||||
@bp.route('/materials/deletelesson/<material_id>', methods=['DELETE'])
|
||||
@require_role(roles="teacher")
|
||||
def delete_lesson(material_id):
|
||||
data = request.get_json()
|
||||
chapter_name = data.get('chapter_name')
|
||||
lesson_name = data.get('lesson_name')
|
||||
teacher_uuid = session.get("user_uuid")
|
||||
teacher_id = current_app.extensions["uuid2username"][teacher_uuid]
|
||||
if delete_material_chapter_lesson(material_id, chapter_name, lesson_name, teacher_id):
|
||||
return jsonify({"message": "课时删除成功"}), 200
|
||||
return jsonify({"message": "课时删除失败"}), 404
|
||||
|
||||
@bp.route('/teacher/materials', methods=['GET'])
|
||||
@require_role(roles="teacher")
|
||||
def get_materials_by_teacher_view():
|
||||
|
||||
Reference in New Issue
Block a user