use markdown to edit

This commit is contained in:
Cai
2025-11-03 16:14:57 +08:00
parent ce88ae645e
commit 33844786a1
9 changed files with 1126 additions and 53 deletions

631
Html/.log
View File

@@ -0,0 +1,631 @@
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
* Restarting with stat
* Debugger is active!
* Debugger PIN: 188-535-136
(41568) wsgi starting up on http://0.0.0.0:5551
(41568) accepted ('127.0.0.1', 50044)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 302 351 0.001881
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /login HTTP/1.1" 200 1835 0.003117
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /static/css/login.css HTTP/1.1" 304 183 0.005173
(41568) accepted ('127.0.0.1', 50056)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /static/js/login.js HTTP/1.1" 304 183 0.000986
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /favicon.ico HTTP/1.1" 404 331 0.001235
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "POST /login_post HTTP/1.1" 200 748 0.021746
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /favicon.ico HTTP/1.1" 404 331 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:48] "GET /dashboard HTTP/1.1" 200 17371 0.010426
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001344
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001144
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000875
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /static/css/footer.css HTTP/1.1" 304 184 0.000854
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /static/js/dashboard.js HTTP/1.1" 304 186 0.000818
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /favicon.ico HTTP/1.1" 404 331 0.000986
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:49] "GET /favicon.ico HTTP/1.1" 404 331 0.000971
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /switch-role/student HTTP/1.1" 302 372 0.000993
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /teacherboard HTTP/1.1" 200 8203 0.008271
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001360
(41568) accepted ('127.0.0.1', 50062)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000989
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000896
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001140
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001083
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000880
(41568) accepted ('127.0.0.1', 50072)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001091
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000889
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001189
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/css/footer.css HTTP/1.1" 304 184 0.000928
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:51] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000815
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:52] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004618
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:52] "GET /favicon.ico HTTP/1.1" 404 331 0.001004
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:52] "GET /favicon.ico HTTP/1.1" 404 331 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11082 0.007377
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001594
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/lesson.css HTTP/1.1" 304 183 0.001420
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001116
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001244
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000817
(41568) accepted ('127.0.0.1', 50082)
(41568) accepted ('127.0.0.1', 50092)
(41568) accepted ('127.0.0.1', 50094)
(41568) accepted ('127.0.0.1', 50108)
(41568) accepted ('127.0.0.1', 50120)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000917
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000766
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000756
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000771
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000969
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001322
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000898
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000931
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000803
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:14:54] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004504
(41568) accepted ('127.0.0.1', 39744)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11083 0.007307
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001199
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001104
(41568) accepted ('127.0.0.1', 39756)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/lesson.css HTTP/1.1" 304 183 0.001733
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000834
(41568) accepted ('127.0.0.1', 39766)
(41568) accepted ('127.0.0.1', 39768)
(41568) accepted ('127.0.0.1', 39772)
(41568) accepted ('127.0.0.1', 39784)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000829
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000832
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000846
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000815
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001219
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001018
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001423
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000894
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000993
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /static/js/lesson.js HTTP/1.1" 200 53750 0.000902
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:08] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004910
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11083 0.005075
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001413
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000923
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/lesson.css HTTP/1.1" 304 183 0.000996
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001151
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000757
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000763
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000773
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000756
(41568) accepted ('127.0.0.1', 53354)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000737
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000761
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001197
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001050
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 6493 0.001188
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /static/js/lesson.js HTTP/1.1" 304 184 0.001322
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:33:44] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004757
(41568) accepted ('127.0.0.1', 42416)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11083 0.005412
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001825
(41568) accepted ('127.0.0.1', 42430)
(41568) accepted ('127.0.0.1', 42438)
(41568) accepted ('127.0.0.1', 42440)
(41568) accepted ('127.0.0.1', 42452)
(41568) accepted ('127.0.0.1', 42466)
(41568) accepted ('127.0.0.1', 42468)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001312
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/lesson.css HTTP/1.1" 304 183 0.000961
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000868
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000821
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000809
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000825
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001333
(41568) accepted ('127.0.0.1', 42470)
(41568) accepted ('127.0.0.1', 42472)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000785
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000911
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001202
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001057
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000901
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /static/js/lesson.js HTTP/1.1" 200 53763 0.000989
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:35:51] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004616
(41568) accepted ('127.0.0.1', 42772)
180.160.52.227,127.0.0.1 - - [03/Nov/2025 15:38:21] "GET / HTTP/1.1" 302 351 0.000849
180.160.52.227,127.0.0.1 - - [03/Nov/2025 15:38:21] "GET /login HTTP/1.1" 200 1835 0.000920
180.160.52.227,127.0.0.1 - - [03/Nov/2025 15:38:24] "GET / HTTP/1.1" 302 351 0.001306
180.160.52.227,127.0.0.1 - - [03/Nov/2025 15:38:24] "GET /login HTTP/1.1" 200 1835 0.000905
(41568) accepted ('127.0.0.1', 46166)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:39] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11083 0.004903
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001889
(41568) accepted ('127.0.0.1', 46178)
(41568) accepted ('127.0.0.1', 46190)
(41568) accepted ('127.0.0.1', 46206)
(41568) accepted ('127.0.0.1', 46210)
(41568) accepted ('127.0.0.1', 46212)
(41568) accepted ('127.0.0.1', 46222)
(41568) accepted ('127.0.0.1', 46226)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001045
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/lesson.css HTTP/1.1" 200 4146 0.000942
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000808
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000778
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000790
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000771
(41568) accepted ('127.0.0.1', 46234)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000786
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001189
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001223
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000968
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000873
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /static/js/lesson.js HTTP/1.1" 200 53761 0.000983
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:42:40] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004733
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11150 0.007183
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001868
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001353
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001031
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000923
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000880
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/lesson_markdown.css HTTP/1.1" 200 1245 0.000782
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000813
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000787
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000800
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000809
(41568) accepted ('127.0.0.1', 48348)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000741
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001690
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000945
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000864
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:06] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000844
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:07] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005091
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11151 0.007048
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001528
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000904
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000990
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001003
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000759
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000728
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000784
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000797
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 193 0.000731
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000735
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001118
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001194
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001149
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000854
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000767
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:43:45] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004491
(41568) accepted ('127.0.0.1', 38458)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11151 0.004839
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001295
(41568) accepted ('127.0.0.1', 38462)
(41568) accepted ('127.0.0.1', 38466)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001142
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001243
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001024
(41568) accepted ('127.0.0.1', 38470)
(41568) accepted ('127.0.0.1', 38486)
(41568) accepted ('127.0.0.1', 38494)
(41568) accepted ('127.0.0.1', 38504)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001319
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001103
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000792
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/lesson_markdown.css HTTP/1.1" 200 1725 0.000824
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000826
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000897
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001240
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001281
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001209
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000850
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000809
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:46:51] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004485
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11151 0.004950
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001471
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001643
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001233
(41568) accepted ('127.0.0.1', 53938)
(41568) accepted ('127.0.0.1', 53942)
(41568) accepted ('127.0.0.1', 53950)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000910
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001187
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000817
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/lesson_markdown.css HTTP/1.1" 200 1710 0.000786
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000784
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000797
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000783
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000802
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001250
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000945
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000779
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:04] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000838
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:05] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004577
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11146 0.007167
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001522
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001271
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001164
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000807
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000755
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000758
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000757
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000716
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000972
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000849
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000757
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001177
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001008
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001343
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.001212
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:47:42] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005836
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11147 0.007278
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.001461
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001120
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000822
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000736
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000760
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.000764
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000764
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000742
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001175
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000772
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000795
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.002104
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.002253
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.002281
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:09] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.000992
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:48:10] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004510
(41568) accepted ('127.0.0.1', 39694)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.010571
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.002091
(41568) accepted ('127.0.0.1', 39708)
(41568) accepted ('127.0.0.1', 39714)
(41568) accepted ('127.0.0.1', 39716)
(41568) accepted ('127.0.0.1', 39730)
(41568) accepted ('127.0.0.1', 39744)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001202
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001020
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001257
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000926
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000930
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001009
(41568) accepted ('127.0.0.1', 39756)
(41568) accepted ('127.0.0.1', 39768)
(41568) accepted ('127.0.0.1', 39776)
(41568) accepted ('127.0.0.1', 39792)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000958
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000888
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000874
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000998
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.002097
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001481
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001140
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.001155
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:33] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.006016
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11147 0.008506
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001878
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001546
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001038
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001013
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000991
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000987
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000905
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000928
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000937
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000899
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000902
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001467
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001093
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001618
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.001103
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:45] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005278
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.007705
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.002006
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001177
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001066
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001048
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001003
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000926
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000952
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001171
(41568) accepted ('127.0.0.1', 52012)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000942
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000979
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001197
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001437
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001351
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001576
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.001589
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:51] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005877
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /teacherboard HTTP/1.1" 200 8212 0.005493
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001826
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001127
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001117
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000941
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000984
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000948
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001184
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001034
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001667
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001152
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /static/css/footer.css HTTP/1.1" 304 184 0.001183
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:56] "GET /favicon.ico HTTP/1.1" 404 331 0.006401
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /favicon.ico HTTP/1.1" 404 331 0.000847
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /switch-role/teacher HTTP/1.1" 302 363 0.001044
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /dashboard HTTP/1.1" 200 17380 0.019266
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001298
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001060
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000862
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /static/css/footer.css HTTP/1.1" 304 184 0.000830
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /static/js/dashboard.js HTTP/1.1" 304 186 0.000919
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:57] "GET /favicon.ico HTTP/1.1" 404 331 0.001099
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:50:58] "GET /favicon.ico HTTP/1.1" 404 331 0.000814
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /switch-role/student HTTP/1.1" 302 372 0.000975
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /teacherboard HTTP/1.1" 200 8212 0.004555
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001387
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000929
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001197
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000878
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000803
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000819
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000782
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000752
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001189
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001122
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /static/css/footer.css HTTP/1.1" 304 184 0.000885
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:00] "GET /favicon.ico HTTP/1.1" 404 331 0.001021
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /favicon.ico HTTP/1.1" 404 331 0.000760
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /teacherboard HTTP/1.1" 200 8212 0.004878
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001571
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001217
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001152
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001058
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001141
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001056
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001016
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001000
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001390
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/css/footer.css HTTP/1.1" 304 184 0.000859
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000772
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /favicon.ico HTTP/1.1" 404 331 0.000989
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:01] "GET /favicon.ico HTTP/1.1" 404 331 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:02] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005184
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004915
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001574
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001165
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000964
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000815
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000774
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000750
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000753
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000780
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000760
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000784
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000735
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001244
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001065
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/lesson.js HTTP/1.1" 304 185 0.001165
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.000884
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:51:05] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005124
(41568) accepted ('127.0.0.1', 57372)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004882
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001895
(41568) accepted ('127.0.0.1', 57384)
(41568) accepted ('127.0.0.1', 57390)
(41568) accepted ('127.0.0.1', 57396)
(41568) accepted ('127.0.0.1', 57412)
(41568) accepted ('127.0.0.1', 57426)
(41568) accepted ('127.0.0.1', 57430)
(41568) accepted ('127.0.0.1', 57446)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001004
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000892
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000819
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000768
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000796
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000804
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000786
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000776
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001617
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001436
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001345
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001246
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/lesson.js HTTP/1.1" 200 54304 0.000999
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 6287 0.000801
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:57:07] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004729
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.005552
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001728
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001486
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.001004
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001244
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001079
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000858
(41568) accepted ('127.0.0.1', 46042)
(41568) accepted ('127.0.0.1', 46046)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000917
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000883
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001270
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000921
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001407
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001396
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001082
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001312
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /static/js/lesson.js HTTP/1.1" 304 184 0.000996
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 15:58:10] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005539
(41568) accepted ('127.0.0.1', 58128)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004758
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001748
(41568) accepted ('127.0.0.1', 58134)
(41568) accepted ('127.0.0.1', 58140)
(41568) accepted ('127.0.0.1', 58152)
(41568) accepted ('127.0.0.1', 58162)
(41568) accepted ('127.0.0.1', 58176)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001761
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000915
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000857
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001128
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000749
(41568) accepted ('127.0.0.1', 58188)
(41568) accepted ('127.0.0.1', 58192)
(41568) accepted ('127.0.0.1', 58204)
(41568) accepted ('127.0.0.1', 58214)
(41568) accepted ('127.0.0.1', 58216)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000790
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000767
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000782
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000763
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000954
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.002242
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 193 0.001456
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000909
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /static/js/lesson.js HTTP/1.1" 200 54367 0.000957
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:01:09] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004564
(41568) accepted ('127.0.0.1', 36530)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:15] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004877
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001436
(41568) accepted ('127.0.0.1', 36542)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001638
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001038
(41568) accepted ('127.0.0.1', 36554)
(41568) accepted ('127.0.0.1', 36568)
(41568) accepted ('127.0.0.1', 36580)
(41568) accepted ('127.0.0.1', 36586)
(41568) accepted ('127.0.0.1', 36602)
(41568) accepted ('127.0.0.1', 36604)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001074
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000784
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000789
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000796
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000788
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000779
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000750
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000787
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001206
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001106
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 11083 0.001661
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /static/js/lesson.js HTTP/1.1" 200 54433 0.001492
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:16] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004935
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004975
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001501
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001069
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001175
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000865
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000763
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000750
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000847
(41568) accepted ('127.0.0.1', 32888)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000780
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000793
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000755
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000776
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001219
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001457
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 11089 0.001206
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /static/js/lesson.js HTTP/1.1" 304 184 0.000976
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:06:51] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005745
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004841
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001493
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001615
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000821
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000773
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000769
(41568) accepted ('127.0.0.1', 53038)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000744
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000798
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000743
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000798
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000774
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001206
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001246
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/lesson.js HTTP/1.1" 304 184 0.001454
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 11087 0.000961
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:07:09] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004865
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.005453
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.002162
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001370
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001126
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.001186
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000945
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000908
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000856
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.001496
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000953
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000960
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001141
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001338
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001483
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 11102 0.001370
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /static/js/lesson.js HTTP/1.1" 304 184 0.001143
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:08:30] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.006591
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004809
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001432
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001246
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000798
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001027
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000804
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000759
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000743
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000761
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000737
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000851
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001217
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001230
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001219
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/lesson_markdown.js HTTP/1.1" 200 6292 0.001312
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:52] "GET /static/js/lesson.js HTTP/1.1" 200 59245 0.001177
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:09:53] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005272
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004771
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001279
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001287
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000856
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000765
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000752
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.001090
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000741
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.000756
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000734
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000750
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000779
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.001222
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.000952
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 192 0.000946
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /static/js/lesson.js HTTP/1.1" 200 59210 0.000921
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:07] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.004544
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /api/materials/68bacdfadf5aeae0912f7f18/chapters/%E7%AC%AC%E5%9B%9B%E5%91%A8/lessons/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 11156 0.004941
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/teacherboard.css HTTP/1.1" 304 190 0.001591
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/lesson.css HTTP/1.1" 304 184 0.001462
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 200 0.000901
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000816
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/lesson_markdown.css HTTP/1.1" 304 194 0.000769
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/lesson_setting.css HTTP/1.1" 304 191 0.000762
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000943
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/css/navbar.css HTTP/1.1" 304 184 0.000774
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000746
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000826
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/modelinput.js HTTP/1.1" 304 188 0.000754
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001233
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/teacherboard.js HTTP/1.1" 304 191 0.000933
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/lesson_markdown.js HTTP/1.1" 304 192 0.001308
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /static/js/lesson.js HTTP/1.1" 200 59199 0.001151
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 11, 3, 13, 43, 44, 383000) image_url='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/TCake_book_cover.png' chapters=[Chapter(chapter_name='第一周', lessons=[Lesson(lesson_name='效率的重要性与实践验证', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250916T050319Z_score_prompt.md')]), Chapter(chapter_name='第二周', lessons=[Lesson(lesson_name='分治法与代表算法——归并排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T153841Z_score_prompt.md')]), Chapter(chapter_name='第三周', lessons=[Lesson(lesson_name='分治法实践与优化', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250922T154450Z_score_prompt.md')]), Chapter(chapter_name='第四周', lessons=[Lesson(lesson_name='基于比较的排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131013Z_score_prompt.md')]), Chapter(chapter_name='第五周', lessons=[Lesson(lesson_name='非比较型排序', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20251103T131045Z_score_prompt.md')]), Chapter(chapter_name='基础算法', lessons=[Lesson(lesson_name='二分', markdown_lesson_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_lesson.md', markdown_prompt_file_name='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_prompt.md', markdown_score_prompt_file_link='https://hsamooc-cdn-1374354408.cos.ap-guangzhou.myqcloud.com/materials_68bacdfadf5aeae0912f7f18_untitled_untitled_20250905T194845Z_score_prompt.md')])]
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:10:20] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 4434 0.005099
(41568) accepted ('127.0.0.1', 52830)
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:12:34] "POST /api/materials/save/68bacdfadf5aeae0912f7f18/%E7%AC%AC%E5%9B%9B%E5%91%A8/%E5%9F%BA%E4%BA%8E%E6%AF%94%E8%BE%83%E7%9A%84%E6%8E%92%E5%BA%8F HTTP/1.1" 200 1082 0.585302
59.78.194.184,127.0.0.1 - - [03/Nov/2025 16:14:05] "POST /api/upload HTTP/1.1" 200 327 0.510310

View File

@@ -12,7 +12,7 @@ if __name__ == "__main__":
app, app,
host="0.0.0.0", host="0.0.0.0",
port=5551, port=5551,
debug=False, # 开发期打开 debug=True, # 开发期打开
# allow_unsafe_werkzeug=True, # 避免 dev server 的安全限制提示 # allow_unsafe_werkzeug=True, # 避免 dev server 的安全限制提示
# ssl_context=('server.crt', 'server.key') # ssl_context=('server.crt', 'server.key')
) )

View File

@@ -125,7 +125,7 @@
.tab-btn.active { background:#f0f8ff; border-color:#a0c4ff; } .tab-btn.active { background:#f0f8ff; border-color:#a0c4ff; }
.actions { margin-left:auto; } .actions { margin-left:auto; }
.actions button { padding:6px 12px; border:none; border-radius:8px; background:#4CAF50; color:#fff; cursor:pointer; } .actions button { padding:6px 12px; border:none; border-radius:8px; background:#4CAF50; color:#fff; cursor:pointer; }
.tab-content { flex:1; padding:8px; } .tab-content { flex:1; padding:8px;display: flex; }
.tab { display:none; height:100%; } .tab { display:none; height:100%; }
.tab.active { display:block; height:100%; } .tab.active { display:block; height:100%; }
textarea { textarea {

View File

@@ -0,0 +1,56 @@
/* 左右分栏:左=编辑,右=预览 */
.editor-pane {
grid-template-columns: 1fr 1fr; /* 左右各一半 */
gap: 12px;
align-items: start;
}
/* 兼容你页面现有布局:让编辑区域(左半)占满左侧 */
.tab-content {
height: calc(100vh - 220px); /* 视口高度自适应,按需调整 */
overflow: hidden; /* 内部由 EasyMDE 自己滚动 */
display: flex;
}
.tab {
height: 100%;
}
.tab textarea {
height: 100%;
}
/* 右侧预览 */
.md-preview-pane {
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 16px;
background: #fff;
height: calc(100vh - 220px);
overflow: auto;
}
.md-preview-pane h1, .md-preview-pane h2, .md-preview-pane h3 {
border-bottom: 1px solid #f1f5f9;
padding-bottom: .3em;
margin-top: 1.2em;
}
.md-preview-pane img {
max-width: 100%;
height: auto;
}
/* 只影响右侧 Markdown 预览里的表格 */
.md-preview-pane .table {
/* 如果你想完全摆脱 bootstrap.table 的影响 */
all: revert; /* 或者 all: unset; 视需求选择 */
display: table;
border-collapse: collapse;
/* 下面写你自己的表格样式 */
border: 1px solid #e5e7eb;
}
.md-preview-pane .table th,
.md-preview-pane .table td {
border: 1px solid #e5e7eb;
padding: 8px 10px;
}
.md-preview-pane .table thead th {
background: #f8fafc;
font-weight: 600;
}

View File

@@ -801,10 +801,11 @@ function ValidTextareaNoBlankHead(textarea) {
// 更新 textarea 的值(如果有变化) // 更新 textarea 的值(如果有变化)
textarea.value = lines.join("\n"); textarea.value = lines.join("\n");
} }
const editors = document.querySelectorAll("textarea"); const editorsDoc = document.querySelectorAll("textarea");
const PREFIX = "### "; const PREFIX = "### ";
// 记录每个 textarea 最新的“标题内容”(不含前缀) // 记录每个 textarea 最新的“标题内容”(不含前缀)
const lastTitleMap = new Map(); const lastTitleMap = new Map();
// 防止循环触发 // 防止循环触发
let isProgrammaticUpdate = false; let isProgrammaticUpdate = false;
function getFirstLine(text) { function getFirstLine(text) {
@@ -823,7 +824,7 @@ const lastTitleMap = new Map();
return { line: normalized, title }; return { line: normalized, title };
} }
// 初始化 lastTitleMap把当前值规范化一次 // 初始化 lastTitleMap把当前值规范化一次
editors.forEach(ed => { editorsDoc.forEach(ed => {
const rawFirst = getFirstLine(ed.value || ""); const rawFirst = getFirstLine(ed.value || "");
const { line, title } = normalizeFirstLine(rawFirst); const { line, title } = normalizeFirstLine(rawFirst);
if (line !== rawFirst) { if (line !== rawFirst) {
@@ -837,7 +838,7 @@ const lastTitleMap = new Map();
function syncOthers(sourceEditor, newTitle) { function syncOthers(sourceEditor, newTitle) {
isProgrammaticUpdate = true; isProgrammaticUpdate = true;
try { try {
editors.forEach(ed => { editorsDoc.forEach(ed => {
if (ed === sourceEditor) return; if (ed === sourceEditor) return;
const first = getFirstLine(ed.value || ""); const first = getFirstLine(ed.value || "");
const { line } = normalizeFirstLine(first); const { line } = normalizeFirstLine(first);
@@ -851,53 +852,201 @@ const lastTitleMap = new Map();
isProgrammaticUpdate = false; isProgrammaticUpdate = false;
} }
} }
editors.forEach(editor => {
editor.addEventListener("input", (event) => {
const textarea = event.target
const value = event.target.value;
const type = event.target.dataset.type;
// 在这里做提示或校验
console.log(`内容已更改: ${event.target.id} => ${value}`);
ValidTextareaNoBlankHead(event.target) // ==== 前置:你的三编辑器实例与 id 映射(按你实际为准)====
const ID_LESSON = 'editor-lesson';
const ID_PROMPT = 'editor-prompt';
const ID_SCORE = 'editor-score';
const rawFirst = getFirstLine(value); // editors: { [textareaId]: EasyMDEInstance }
const editorIds = [ID_LESSON, ID_PROMPT, ID_SCORE];
// 全局防抖/重入保护:避免程序化更新再触发同步
// // 记录上一次各编辑器的标题文本(不含 "### " 前缀)
// const lastTitleMap = new Map();
// —— 工具:从 EasyMDE 拿值 / 设值(会同步 textarea因为 forceSync:true——
const getMD = (id) => editors[id].value();
const setMD = (id, text) => editors[id].value(text);
// —— 工具:仅替换“首行”为 normalizedLine尽量不破坏光标与撤销栈 ——
// line 是完整首行文本(含 "### "
function setFirstLineInEditor(ed, normalizedLine) {
const cm = ed.codemirror;
cm.operation(() => {
const doc = cm.getDoc();
const firstLine = doc.getLine(0) ?? "";
if (firstLine === normalizedLine) return;
// 记住用户光标
const cursors = doc.listSelections();
// 用 replaceRange 仅替换首行
doc.replaceRange(
normalizedLine,
{ line: 0, ch: 0 },
{ line: 0, ch: firstLine.length }
);
// 尽力恢复光标(如果原先在首行,偏移可能要校正)
doc.setSelections(cursors);
});
}
// —— 工具:从 Markdown 文本取首行(兼容你现有函数)
function getFirstLineFromText(text) {
const idx = text.indexOf('\n');
return idx === -1 ? text : text.slice(0, idx);
}
// —— 工具:把 normalizedLine 写回文本首行(备用:整段 setValue——
function setFirstLineInText(text, normalizedLine) {
const idx = text.indexOf('\n');
return idx === -1 ? normalizedLine : (normalizedLine + text.slice(idx));
}
// —— 同步另外两个编辑器的首行(仅标题行),避免全文覆盖 ——
function syncOthersTitle(fromId, titleText /*不含前缀*/, normalizedLine /*含### */) {
editorIds.forEach((id) => {
if (id === fromId) return;
const ed = editors[id];
if (!ed) return;
const currentFirst = ed.codemirror.getDoc().getLine(0) ?? "";
if (currentFirst !== normalizedLine) {
setFirstLineInEditor(ed, normalizedLine);
lastTitleMap.set(ed, titleText);
}
});
}
// —— 更新 tab 按钮上的 “*” 修改状态(保持你原逻辑)——
function refreshTabDirtyBadges() {
let btn = document.getElementById("tab-btn-lesson");
if (CURRENT.active.lesson !== getMD(ID_LESSON)) {
btn.innerText = AddModifiedStat(btn.innerText);
} else {
btn.innerText = ClearModifiedStat(btn.innerText);
}
btn = document.getElementById("tab-btn-prompt");
if (CURRENT.active.prompt !== getMD(ID_PROMPT)) {
btn.innerText = AddModifiedStat(btn.innerText);
} else {
btn.innerText = ClearModifiedStat(btn.innerText);
}
btn = document.getElementById("tab-btn-score");
if (CURRENT.active.score !== getMD(ID_SCORE)) {
btn.innerText = AddModifiedStat(btn.innerText);
} else {
btn.innerText = ClearModifiedStat(btn.innerText);
}
}
// —— 单个编辑器的 change 处理器工厂 ——
function bindEditorChangeHandler(textareaId) {
const ed = editors[textareaId];
const cm = ed.codemirror;
// 初始化 lastTitleMap
lastTitleMap.set(ed, "");
cm.on('change', () => {
if (isProgrammaticUpdate) return;
const value = ed.value();
const rawFirst = getFirstLineFromText(value);
// 你自己的校验(如果要继续保留)
// ValidTextareaNoBlankHead(ed.element.nextSibling /* textarea DOM? */);
// 归一化首行,要求 "### " 前缀
const { line: normalizedLine, title: currentTitle } = normalizeFirstLine(rawFirst); const { line: normalizedLine, title: currentTitle } = normalizeFirstLine(rawFirst);
// 若首行不规范,程序化改回去(仅替换首行)
if (normalizedLine !== rawFirst) { if (normalizedLine !== rawFirst) {
isProgrammaticUpdate = true;// 把首行改回以 '### ' 开头 isProgrammaticUpdate = true;
try { try {
textarea.value = setFirstLine(value, normalizedLine); setFirstLineInEditor(ed, normalizedLine);
} finally { } finally {
isProgrammaticUpdate = false; isProgrammaticUpdate = false;
} }
} }
const lastTitle = lastTitleMap.get(textarea) ?? "";// —— 2) 如标题内容有变化,则同步到其他两个 —— //
// 标题变化则同步到其他两个编辑器(只同步首行)
const lastTitle = lastTitleMap.get(ed) ?? "";
if (currentTitle !== lastTitle) { if (currentTitle !== lastTitle) {
lastTitleMap.set(textarea, currentTitle);// 更新自身记录 lastTitleMap.set(ed, currentTitle);
syncOthers(textarea, currentTitle); isProgrammaticUpdate = true;
try {
syncOthersTitle(textareaId, currentTitle, normalizedLine);
} finally {
isProgrammaticUpdate = false;
}
} }
let btn = document.getElementById("tab-btn-lesson"); // 刷新三个 Tab 的“修改中 * ”标识
if (CURRENT.active.lesson != document.getElementById("editor-lesson").value){ refreshTabDirtyBadges();
btn.innerText = AddModifiedStat(btn.innerText)
}else{ // 如果你还有右侧预览:
btn.innerText = ClearModifiedStat(btn.innerText) if (typeof renderToPreview === 'function' && textareaId === activeId) {
} renderToPreview(ed.value());
btn = document.getElementById("tab-btn-prompt");
if (CURRENT.active.prompt != document.getElementById("editor-prompt").value){
btn.innerText = AddModifiedStat(btn.innerText)
}else{
btn.innerText = ClearModifiedStat(btn.innerText)
}
btn = document.getElementById("tab-btn-score");
if (CURRENT.active.score != document.getElementById("editor-score").value){
btn.innerText = AddModifiedStat(btn.innerText)
}else{
btn.innerText = ClearModifiedStat(btn.innerText)
} }
}); });
}); }
// 绑定三个编辑器
editorIds.forEach(bindEditorChangeHandler);
// editorsDoc.forEach(editor => {
// editor.addEventListener("input", (event) => {
// const textarea = event.target
// const value = event.target.value;
// const type = event.target.dataset.type;
// // 在这里做提示或校验
// console.log(`内容已更改: ${event.target.id} => ${value}`);
// ValidTextareaNoBlankHead(event.target)
// const rawFirst = getFirstLine(value);
// const { line: normalizedLine, title: currentTitle } = normalizeFirstLine(rawFirst);
// if (normalizedLine !== rawFirst) {
// isProgrammaticUpdate = true;// 把首行改回以 '### ' 开头
// try {
// textarea.value = setFirstLine(value, normalizedLine);
// } finally {
// isProgrammaticUpdate = false;
// }
// }
// const lastTitle = lastTitleMap.get(textarea) ?? "";// —— 2) 如标题内容有变化,则同步到其他两个 —— //
// if (currentTitle !== lastTitle) {
// lastTitleMap.set(textarea, currentTitle);// 更新自身记录
// syncOthers(textarea, currentTitle);
// }
// let btn = document.getElementById("tab-btn-lesson");
// if (CURRENT.active.lesson != document.getElementById("editor-lesson").value){
// btn.innerText = AddModifiedStat(btn.innerText)
// }else{
// btn.innerText = ClearModifiedStat(btn.innerText)
// }
// btn = document.getElementById("tab-btn-prompt");
// if (CURRENT.active.prompt != document.getElementById("editor-prompt").value){
// btn.innerText = AddModifiedStat(btn.innerText)
// }else{
// btn.innerText = ClearModifiedStat(btn.innerText)
// }
// btn = document.getElementById("tab-btn-score");
// if (CURRENT.active.score != document.getElementById("editor-score").value){
// btn.innerText = AddModifiedStat(btn.innerText)
// }else{
// btn.innerText = ClearModifiedStat(btn.innerText)
// }
// });
// });
// 把“某个步骤”对应的三个片段载入到三个编辑器 // 把“某个步骤”对应的三个片段载入到三个编辑器
@@ -918,9 +1067,9 @@ function loadStepToEditors(phaseText, stepText) {
const pText = sliceSection(subP, stepText, 3) || promptPhase; const pText = sliceSection(subP, stepText, 3) || promptPhase;
const sText = sliceSection(subS, stepText, 3) || scorePhase; const sText = sliceSection(subS, stepText, 3) || scorePhase;
document.getElementById('editor-lesson').value = lText; editors['editor-lesson'].value(lText);
document.getElementById('editor-prompt').value = pText; editors['editor-prompt'].value(pText);
document.getElementById('editor-score').value = sText; editors['editor-score'].value(sText);
CURRENT.active={ //保存打开时的三个文本 CURRENT.active={ //保存打开时的三个文本
phase:phaseText, phase:phaseText,
@@ -938,14 +1087,30 @@ function loadStepToEditors(phaseText, stepText) {
} }
// Tab 切换
document.addEventListener('click', (e) => { document.addEventListener('click', (e) => {
if (e.target.classList.contains('tab-btn')) { if (e.target.classList.contains('tab-btn')) {
document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active')); document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));
e.target.classList.add('active'); e.target.classList.add('active');
const id = e.target.dataset.target; const id = e.target.dataset.target;
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active')); document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.getElementById(id).classList.add('active'); document.getElementById(id).classList.add('active');
// 广播 tab 变更(告诉别人当前激活的 tab id / 以及要用哪个 editorId
const editorIdMap = {
'tab-lesson' : 'editor-lesson',
'tab-prompt' : 'editor-prompt',
'tab-score' : 'editor-score',
};
const activeBtnId = e.target.id; // 如 'tab-btn-lesson'
const editorId =
activeBtnId === 'tab-btn-lesson' ? 'editor-lesson' :
activeBtnId === 'tab-btn-prompt' ? 'editor-prompt' :
'editor-score';
document.dispatchEvent(new CustomEvent('tab:change', {
detail: { tabId: id, editorId }
}));
} }
}); });

View File

@@ -0,0 +1,198 @@
const editors = {}; // id -> EasyMDE
(function(){
// ====== 配置:图片上传接口 ======
const UPLOAD_URL = '/api/upload'; // 返回 { url: 'https://...' }
// ====== Markdown 渲染器 ======
const md = window.markdownit({
html: false, // 禁止原生HTML安全些如需支持可设为 true
linkify: true,
typographer: true,
breaks: true
});
const $preview = document.getElementById('md-preview');
// ====== 三个 textarea 的 EasyMDE 实例 ======
const textareas = [
{ id: 'editor-lesson', tabBtnId: 'tab-btn-lesson' },
{ id: 'editor-prompt', tabBtnId: 'tab-btn-prompt' },
{ id: 'editor-score', tabBtnId: 'tab-btn-score' },
];
let activeId = 'editor-lesson'; // 默认激活
// 工具:将 Markdown 渲染到右侧预览
const renderToPreview = (markdownStr) => {
const rawHtml = md.render(markdownStr || '');
const safe = DOMPurify.sanitize(rawHtml);
$preview.innerHTML = safe;
};
// 工具:节流/防抖
function debounce(fn, delay){
let t;
return function(...args){
clearTimeout(t);
t = setTimeout(()=>fn.apply(this,args), delay);
}
}
const debouncedPreview = debounce(renderToPreview, 120);
// 工具:插入文本到当前光标
function insertAtCursor(cm, text){
const doc = cm.getDoc();
const cursor = doc.getCursor();
doc.replaceRange(text, cursor);
}
// 图片上传:给粘贴/拖拽/按钮选择共用
async function uploadFile(file){
const form = new FormData();
form.append('file', file);
const { data } = await axios.post(UPLOAD_URL, form, {
headers: { 'Content-Type': 'multipart/form-data' }
});
if(!data || !data.url){
throw new Error('上传返回缺少 url 字段');
}
return data.url;
}
// 为一个 EasyMDE 实例注入图片粘贴/拖拽/按钮上传
function bindImageHandlers(easy){
const cm = easy.codemirror;
// 1) 粘贴图片
cm.on('paste', async (cmInst, e)=>{
const items = (e.clipboardData || e.originalEvent?.clipboardData)?.items || [];
for(const it of items){
if(it.kind === 'file'){
const file = it.getAsFile();
if(file && file.type.startsWith('image/')){
e.preventDefault();
try{
const url = await uploadFile(file);
insertAtCursor(cmInst, `![image](${url})`);
}catch(err){
console.error(err);
alert('图片上传失败,请重试');
}
}
}
}
});
// 2) 拖拽图片
easy.codemirror.getWrapperElement().addEventListener('drop', async (e)=>{
const files = e.dataTransfer?.files || [];
if(!files.length) return;
const img = Array.from(files).find(f=>f.type.startsWith('image/'));
if(!img) return;
e.preventDefault();
try{
const url = await uploadFile(img);
insertAtCursor(cm, `![image](${url})`);
}catch(err){
console.error(err);
alert('图片上传失败,请重试');
}
});
// 3) 工具栏“上传图片”按钮:使用隐藏 input[type=file]
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = 'image/*';
fileInput.style.display = 'none';
fileInput.addEventListener('change', async ()=>{
const file = fileInput.files?.[0];
if(!file) return;
try{
const url = await uploadFile(file);
insertAtCursor(cm, `![image](${url})`);
}catch(err){
console.error(err);
alert('图片上传失败,请重试');
}finally{
fileInput.value = '';
}
});
document.body.appendChild(fileInput);
// 将 input 触发器挂到 toolbar 按钮上(下面初始化里有 name: 'upload-image'
easy.toolbar?.forEach(btn=>{
if(btn?.name === 'upload-image'){
btn.action = () => fileInput.click();
}
});
}
// 创建并初始化一个 EasyMDE
function createMDEFor(textareaId){
const el = document.getElementById(textareaId);
if(!el) return null;
const mde = new EasyMDE({
element: el,
autoDownloadFontAwesome: false,
spellChecker: false,
status: false,
autofocus: textareaId === activeId,
minHeight: '100%',
renderingConfig: { singleLineBreaks: false },
uploadImage: false, // 我们自定义上传
toolbar: [
'bold','italic','heading','|',
'quote','unordered-list','ordered-list','table','|',
'code','link',
{ name:'upload-image', action:null, className:'fa fa-image', title:'插入图片(上传)' },
'|','preview','side-by-side','fullscreen',
'|','guide'
],
// 保证 textarea 同步(默认就会同步 value保存时你的原逻辑仍可读取
forceSync: true
});
// 内容变化 -> 刷新预览(仅激活编辑器触发)
mde.codemirror.on('change', ()=>{
if(textareaId === activeId){
debouncedPreview(mde.value());
}
});
bindImageHandlers(mde);
return mde;
}
// 初始化三个编辑器
for(const t of textareas){
editors[t.id] = createMDEFor(t.id);
}
// 初次渲染预览
debouncedPreview(editors[activeId]?.value() || '');
// 监听 Tab 切换按钮,让预览跟随当前激活编辑器
function setActiveEditor(id){
activeId = id;
// 确保 EasyMDE 的编辑区获得焦点(可选)
const ed = editors[id];
if(ed){
ed.codemirror.refresh();
ed.codemirror.focus();
renderToPreview(ed.value());
}
}
document.addEventListener('tab:change', (e) => {
const { editorId } = e.detail || {};
if (editorId) setActiveEditor(editorId);
});
// 如果你已有 tab 切换逻辑(例如给 .tab-btn 切换 active 类),保留原逻辑即可;
// 我们只需在切换时调用 setActiveEditor 对齐预览内容。
})();

View File

@@ -4,6 +4,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>课时编辑</title> <title>课时编辑</title>
<link rel="stylesheet" href="/static/css/teacherboard.css"> <link rel="stylesheet" href="/static/css/teacherboard.css">
<link rel="stylesheet" href="/static/css/dashboard.css"> <link rel="stylesheet" href="/static/css/dashboard.css">
<link rel="stylesheet" href="/static/css/lesson.css"> <link rel="stylesheet" href="/static/css/lesson.css">
@@ -11,10 +12,18 @@
<link rel="stylesheet" href="/static/css/lesson_setting.css"> <link rel="stylesheet" href="/static/css/lesson_setting.css">
<link rel="stylesheet" href="/static/css/modelinput.css"> <link rel="stylesheet" href="/static/css/modelinput.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="/static/js/modelinput.js"></script> <script src="/static/js/modelinput.js"></script>
<!-- Markdown Editor (EasyMDE) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.css" />
<script src="https://cdn.jsdelivr.net/npm/easymde/dist/easymde.min.js"></script>
<!-- Markdown 渲染与安全 -->
<script src="https://cdn.jsdelivr.net/npm/markdown-it/dist/markdown-it.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dompurify@3.1.7/dist/purify.min.js"></script>
<link rel="stylesheet" href="/static/css/lesson_markdown.css">
</head> </head>
<body > <body >
{% include 'navbar.html' %} <!-- 引入navbar.html --> {% include 'navbar.html' %} <!-- 引入navbar.html -->
@@ -74,6 +83,9 @@
<div id="tab-score" class="tab"> <div id="tab-score" class="tab">
<textarea id="editor-score" data-type="score"></textarea> <textarea id="editor-score" data-type="score"></textarea>
</div> </div>
<aside class="md-preview-pane" id="md-preview">
<div style="color:#64748b">预览区域会实时渲染当前激活的编辑器内容…</div>
</aside>
</div> </div>
</main> </main>
</div> </div>
@@ -81,7 +93,9 @@
<script src="/static/js/course_current.js"></script> <script src="/static/js/course_current.js"></script>
<script src="/static/js/teacherboard.js"></script> <script src="/static/js/teacherboard.js"></script>
<script src="/static/js/teacher_course_setting.js"></script> <script src="/static/js/teacher_course_setting.js"></script>
<script src="/static/js/lesson_markdown.js"></script>
<script src="/static/js/lesson.js"></script> <script src="/static/js/lesson.js"></script>
<script> <script>
window.lesson = {{ lesson|tojson|safe }}; window.lesson = {{ lesson|tojson|safe }};
window.chapter = {{ chapter|tojson|safe }}; window.chapter = {{ chapter|tojson|safe }};

View File

@@ -1,6 +1,6 @@
<link rel="stylesheet" href="/static/css/navbar.css"> <link rel="stylesheet" href="/static/css/navbar.css">
<!-- Bootstrap 5 CSS --> <!-- Bootstrap 5 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"> -->
<!-- Font Awesome 图标 --> <!-- Font Awesome 图标 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="/static/css/dashboard.css"> <link rel="stylesheet" href="/static/css/dashboard.css">

View File

@@ -5,9 +5,18 @@ from bson import ObjectId
from datetime import datetime from datetime import datetime
from ..auth.decorators import require_role from ..auth.decorators import require_role
from ..services.course_service import load_material,save_materials_markdown_cos from ..services.course_service import load_material,save_materials_markdown_cos
from ..services.cos_service import upload_file
import uuid
bp = Blueprint('lesson', __name__) bp = Blueprint('lesson', __name__)
@bp.route("/api/upload", methods=["POST"])
def upload():
f = request.files['file']
url = upload_file(f, "image_" + str(uuid.uuid4()))
return jsonify({"url": url})
# 返回课时元信息(含三份 markdown 的可访问链接或直接内容) # 返回课时元信息(含三份 markdown 的可访问链接或直接内容)
@bp.route('/api/materials/<material_id>/chapters/<chapter_name>/lessons/<lesson_name>', methods=['GET']) @bp.route('/api/materials/<material_id>/chapters/<chapter_name>/lessons/<lesson_name>', methods=['GET'])
@require_role(roles="teacher") @require_role(roles="teacher")