rename chapter/lesson

This commit is contained in:
Cai
2025-09-19 09:06:37 +00:00
parent 6575ee80bc
commit 24f191d5a5
9 changed files with 709 additions and 430 deletions

815
Html/.log
View File

@@ -1,397 +1,420 @@
59.78.194.184,127.0.0.1 - - [16/Sep/2025 05:47:23] "GET / HTTP/1.1" 302 351 0.001580
disconnect handler error
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(62639) wsgi starting up on http://0.0.0.0:5551
(62639) accepted ('127.0.0.1', 41326)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:21] "GET / HTTP/1.1" 302 351 0.002936
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:21] "GET /login HTTP/1.1" 200 1835 0.003593
(62639) accepted ('127.0.0.1', 51910)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:21] "GET /static/css/login.css HTTP/1.1" 304 184 0.039862
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:21] "GET /static/js/login.js HTTP/1.1" 304 183 0.008256
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:21] "GET /favicon.ico HTTP/1.1" 404 331 0.001353
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:22] "GET /favicon.ico HTTP/1.1" 404 331 0.000785
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:23] "POST /login_post HTTP/1.1" 200 428 0.717769
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:23] "GET /dashboard HTTP/1.1" 200 8967 0.135860
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:23] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001282
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:23] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001137
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:23] "GET /static/js/dashboard.js HTTP/1.1" 304 187 0.001202
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:24] "GET /switch-role/student HTTP/1.1" 302 372 0.002102
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /teacherboard HTTP/1.1" 200 8112 0.197401
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001229
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001530
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000981
(62639) accepted ('127.0.0.1', 51914)
(62639) accepted ('127.0.0.1', 51928)
(62639) accepted ('127.0.0.1', 51940)
(62639) accepted ('127.0.0.1', 51956)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001110
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.001138
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000904
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000850
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001205
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16281 0.001105
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:25] "GET /favicon.ico HTTP/1.1" 404 331 0.000976
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:26] "GET /favicon.ico HTTP/1.1" 404 331 0.000813
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:26] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.193444
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:36:31] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 404 283 0.194304
* Detected change in '/home/flask/hsamooc/code-agent/Html/apps/services/course_service.py', reloading
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
[2025-09-19 08:38:14,625] INFO in __init__: Shutting down gracefully (atexit)...
[2025-09-19 08:38:14,625] INFO in __init__: Cleanup finished (atexit).
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(62839) wsgi starting up on http://0.0.0.0:5551
(62839) accepted ('127.0.0.1', 45280)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:20] "GET /teacherboard HTTP/1.1" 302 351 0.001943
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:20] "GET /login HTTP/1.1" 200 1835 0.003491
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:20] "GET /static/css/login.css HTTP/1.1" 304 184 0.006094
(62839) accepted ('127.0.0.1', 45290)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:20] "GET /static/js/login.js HTTP/1.1" 304 183 0.001005
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:20] "GET /favicon.ico HTTP/1.1" 404 331 0.001235
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:21] "GET /favicon.ico HTTP/1.1" 404 331 0.000796
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:22] "POST /login_post HTTP/1.1" 200 428 0.462973
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:22] "GET /dashboard HTTP/1.1" 200 8967 0.132564
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:22] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001207
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:22] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001017
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:22] "GET /static/js/dashboard.js HTTP/1.1" 304 187 0.001261
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /switch-role/student HTTP/1.1" 302 372 0.001341
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /teacherboard HTTP/1.1" 200 8112 0.194641
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001350
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000884
(62839) accepted ('127.0.0.1', 60328)
(62839) accepted ('127.0.0.1', 60344)
(62839) accepted ('127.0.0.1', 60356)
(62839) accepted ('127.0.0.1', 60370)
(62839) accepted ('127.0.0.1', 60386)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000822
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000972
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000726
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000731
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:23] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000708
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:24] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001248
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:24] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.001404
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:24] "GET /favicon.ico HTTP/1.1" 404 331 0.000969
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:24] "GET /favicon.ico HTTP/1.1" 404 331 0.001097
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:24] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.190233
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:38:29] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 404 283 0.190163
* Detected change in '/home/flask/hsamooc/code-agent/Html/apps/views/material.py', reloading
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
课时不存在
[2025-09-19 08:39:17,460] INFO in __init__: Shutting down gracefully (atexit)...
[2025-09-19 08:39:17,461] INFO in __init__: Cleanup finished (atexit).
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(62958) wsgi starting up on http://0.0.0.0:5551
(62958) accepted ('127.0.0.1', 55538)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:19] "GET /teacherboard HTTP/1.1" 302 351 0.001782
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:19] "GET /login HTTP/1.1" 200 1835 0.003293
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:20] "GET /static/css/login.css HTTP/1.1" 304 184 0.006549
(62958) accepted ('127.0.0.1', 55548)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:20] "GET /static/js/login.js HTTP/1.1" 304 183 0.001017
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:20] "GET /favicon.ico HTTP/1.1" 404 331 0.001331
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:20] "GET /favicon.ico HTTP/1.1" 404 331 0.000938
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "POST /login_teacher_post HTTP/1.1" 200 428 0.588661
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /teacherboard HTTP/1.1" 200 8112 0.197234
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001184
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.000943
(62958) accepted ('127.0.0.1', 48230)
(62958) accepted ('127.0.0.1', 48238)
(62958) accepted ('127.0.0.1', 48246)
(62958) accepted ('127.0.0.1', 48256)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000928
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000889
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000834
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000774
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001481
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.001201
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001015
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:22] "GET /favicon.ico HTTP/1.1" 404 331 0.001032
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:23] "GET /favicon.ico HTTP/1.1" 404 331 0.000730
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:23] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.190611
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:26] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 404 283 0.190698
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /teacherboard HTTP/1.1" 200 8112 0.190536
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.001202
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000937
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000779
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000776
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000929
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.000875
(62958) accepted ('127.0.0.1', 50694)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001198
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001255
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.000937
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:50] "GET /favicon.ico HTTP/1.1" 404 331 0.000965
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:39:51] "GET /favicon.ico HTTP/1.1" 404 331 0.000792
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:40:37] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.190695
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:40:40] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 404 283 0.190691
* Detected change in '/home/flask/hsamooc/code-agent/Html/apps/services/course_service.py', reloading
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
课时不存在
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
课时不存在
[2025-09-19 08:42:28,287] INFO in __init__: Shutting down gracefully (atexit)...
[2025-09-19 08:42:28,287] INFO in __init__: Cleanup finished (atexit).
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(63183) wsgi starting up on http://0.0.0.0:5551
* Detected change in '/home/flask/hsamooc/code-agent/Html/apps/services/course_service.py', reloading
[2025-09-19 08:44:46,068] INFO in __init__: Shutting down gracefully (atexit)...
[2025-09-19 08:44:46,068] INFO in __init__: Cleanup finished (atexit).
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(63324) wsgi starting up on http://0.0.0.0:5551
(63324) accepted ('127.0.0.1', 37976)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:18] "GET /teacherboard HTTP/1.1" 302 351 0.001854
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:19] "GET /login HTTP/1.1" 200 1835 0.003244
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:19] "GET /static/js/login.js HTTP/1.1" 304 183 0.006043
(63324) accepted ('127.0.0.1', 37978)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:19] "GET /static/css/login.css HTTP/1.1" 304 184 0.001053
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:19] "GET /favicon.ico HTTP/1.1" 404 331 0.001532
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:20] "GET /favicon.ico HTTP/1.1" 404 331 0.000863
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "POST /login_teacher_post HTTP/1.1" 200 428 0.645367
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /teacherboard HTTP/1.1" 200 8112 0.202486
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001202
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001147
(63324) accepted ('127.0.0.1', 33596)
(63324) accepted ('127.0.0.1', 33588)
(63324) accepted ('127.0.0.1', 33612)
(63324) accepted ('127.0.0.1', 33622)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000895
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000851
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.000841
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000793
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001321
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001202
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.001134
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:21] "GET /favicon.ico HTTP/1.1" 404 331 0.000980
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:22] "GET /favicon.ico HTTP/1.1" 404 331 0.000800
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:22] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.195203
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_dd993856-c5a2-46bf-9b31-238a14de6a9f'
59.78.194.184,127.0.0.1 - - [16/Sep/2025 05:47:23] "GET /socket.io/?user_uuid=user_dd993856-c5a2-46bf-9b31-238a14de6a9f&folder=%2Fhome%2FTCake%2F68bacdfadf5aeae0912f7f18%2F%E7%AE%97%E6%B3%95%E6%95%88%E7%8E%87%2F%E6%95%88%E7%8E%87%E7%9A%84%E9%87%8D%E8%A6%81%E6%80%A7%E4%B8%8E%E5%AE%9E%E8%B7%B5%E9%AA%8C%E8%AF%81&EIO=4&transport=websocket&sid=PYEYzcDw6_8AFakHAAAA HTTP/1.1" 200 0 17.090087
59.78.194.184,127.0.0.1 - - [16/Sep/2025 05:47:23] "GET /login HTTP/1.1" 200 1835 0.003839
59.78.194.184,127.0.0.1 - - [16/Sep/2025 05:47:23] "GET /static/js/login.js HTTP/1.1" 304 183 0.007688
59.78.194.184,127.0.0.1 - - [16/Sep/2025 05:47:23] "GET /static/css/login.css HTTP/1.1" 304 184 0.001261
(185715) accepted ('127.0.0.1', 43808)
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCSHV HTTP/1.1" 200 275 0.000398
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCSWg&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 192 0.000805
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCSWj&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 196 0.000499
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCSaR&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 192 0.000360
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 43816)
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCSaT&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 157 0.000484
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:24:01] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbHCScl&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 157 0.000671
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
49.52.5.54,127.0.0.1 - - [16/Sep/2025 06:44:49] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=B1ccqcz1y9dPlAE1AAAC HTTP/1.1" 200 0 1247.995297
(185715) accepted ('127.0.0.1', 35642)
117.136.120.147,127.0.0.1 - - [16/Sep/2025 06:49:11] "GET /favicon.ico HTTP/1.1" 404 331 0.004418
(185715) accepted ('127.0.0.1', 41232)
149.57.180.156,127.0.0.1 - - [16/Sep/2025 07:00:34] "GET / HTTP/1.1" 302 351 0.001683
149.57.180.156,127.0.0.1 - - [16/Sep/2025 07:00:34] "GET /login HTTP/1.1" 200 1835 0.001421
(185715) accepted ('127.0.0.1', 34508)
59.78.194.184,127.0.0.1 - - [16/Sep/2025 09:01:23] "GET /favicon.ico HTTP/1.1" 404 331 0.004694
59.78.194.184,127.0.0.1 - - [16/Sep/2025 09:01:23] "GET /favicon.ico HTTP/1.1" 404 331 0.001007
59.78.194.184,127.0.0.1 - - [16/Sep/2025 09:01:24] "GET /favicon.ico HTTP/1.1" 404 331 0.001088
59.78.194.184,127.0.0.1 - - [16/Sep/2025 09:01:55] "GET /favicon.ico HTTP/1.1" 404 331 0.001698
59.78.194.184,127.0.0.1 - - [16/Sep/2025 09:01:55] "GET /favicon.ico HTTP/1.1" 404 331 0.002036
(185715) accepted ('127.0.0.1', 53386)
34.150.219.96,127.0.0.1 - - [16/Sep/2025 09:42:11] "GET / HTTP/1.1" 302 351 0.000875
34.150.219.96,127.0.0.1 - - [16/Sep/2025 09:42:11] "GET /login HTTP/1.1" 200 1835 0.000756
(185715) accepted ('127.0.0.1', 53620)
34.172.229.236,127.0.0.1 - - [16/Sep/2025 10:14:08] "GET / HTTP/1.1" 302 351 0.000800
34.172.229.236,127.0.0.1 - - [16/Sep/2025 10:14:09] "GET /login HTTP/1.1" 200 1835 0.000896
(185715) accepted ('127.0.0.1', 34444)
58.198.188.146,127.0.0.1 - - [16/Sep/2025 10:44:08] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbI7-sC HTTP/1.1" 200 275 0.000352
58.198.188.146,127.0.0.1 - - [16/Sep/2025 10:44:09] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbI7_14&sid=LR2BfasKvxPRxnsNAAAE HTTP/1.1" 200 192 0.000732
58.198.188.146,127.0.0.1 - - [16/Sep/2025 10:44:09] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbI7_18&sid=LR2BfasKvxPRxnsNAAAE HTTP/1.1" 200 196 0.000242
58.198.188.146,127.0.0.1 - - [16/Sep/2025 10:44:09] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbI7_36&sid=LR2BfasKvxPRxnsNAAAE HTTP/1.1" 200 192 0.000796
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 34458)
(185715) accepted ('127.0.0.1', 34474)
58.198.188.146,127.0.0.1 - - [16/Sep/2025 10:44:09] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbI7_37&sid=LR2BfasKvxPRxnsNAAAE HTTP/1.1" 200 157 0.247947
(185715) accepted ('127.0.0.1', 42806)
59.78.194.184,127.0.0.1 - - [16/Sep/2025 11:47:28] "GET /favicon.ico HTTP/1.1" 404 331 0.001352
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
58.198.188.146,127.0.0.1 - - [16/Sep/2025 11:56:46] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=LR2BfasKvxPRxnsNAAAE HTTP/1.1" 200 0 4356.802767
(185715) accepted ('127.0.0.1', 55390)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:20] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcTKy HTTP/1.1" 200 275 0.000364
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:41] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcZ74 HTTP/1.1" 200 275 0.000343
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:41] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcZAk&sid=cekXcN6msgjITGbfAAAH HTTP/1.1" 200 192 0.000776
(185715) accepted ('127.0.0.1', 44178)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:41] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcZAk.0&sid=cekXcN6msgjITGbfAAAH HTTP/1.1" 200 196 0.000196
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:41] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcZBl&sid=cekXcN6msgjITGbfAAAH HTTP/1.1" 200 192 0.000442
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 44180)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 12:57:41] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbIcZBl.0&sid=cekXcN6msgjITGbfAAAH HTTP/1.1" 200 157 0.144302
(185715) accepted ('127.0.0.1', 55902)
23.27.145.218,127.0.0.1 - - [16/Sep/2025 13:12:03] "GET / HTTP/1.1" 302 351 0.001001
23.27.145.218,127.0.0.1 - - [16/Sep/2025 13:12:03] "GET /login HTTP/1.1" 200 1835 0.000801
23.27.145.218,127.0.0.1 - - [16/Sep/2025 13:12:04] "GET /static/css/login.css HTTP/1.1" 200 3791 0.002872
(185715) accepted ('127.0.0.1', 55906)
23.27.145.218,127.0.0.1 - - [16/Sep/2025 13:12:04] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001569
162.142.125.195,127.0.0.1 - - [16/Sep/2025 13:12:05] "GET / HTTP/1.1" 302 351 0.000814
162.142.125.195,127.0.0.1 - - [16/Sep/2025 13:12:24] "GET /login HTTP/1.1" 200 1835 0.000830
162.142.125.195,127.0.0.1 - - [16/Sep/2025 13:12:28] "GET /favicon.ico HTTP/1.1" 404 331 0.000829
(185715) accepted ('127.0.0.1', 43834)
34.82.34.164,127.0.0.1 - - [16/Sep/2025 13:22:35] "GET / HTTP/1.1" 302 351 0.001168
34.82.34.164,127.0.0.1 - - [16/Sep/2025 13:22:35] "GET /login HTTP/1.1" 200 1835 0.001068
(185715) accepted ('127.0.0.1', 49640)
54.200.206.157,127.0.0.1 - - [16/Sep/2025 14:38:32] "GET / HTTP/1.1" 302 351 0.001285
(185715) accepted ('127.0.0.1', 53358)
68.183.91.167,127.0.0.1 - - [16/Sep/2025 15:47:18] "GET / HTTP/1.1" 302 351 0.001115
68.183.91.167,127.0.0.1 - - [16/Sep/2025 15:47:21] "GET /login HTTP/1.1" 200 1835 0.001974
68.183.91.167,127.0.0.1 - - [16/Sep/2025 15:47:22] "GET /favicon.ico HTTP/1.1" 404 331 0.000847
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:51] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=cekXcN6msgjITGbfAAAH HTTP/1.1" 200 0 11049.633881
(185715) accepted ('127.0.0.1', 45882)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:53] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGjMh HTTP/1.1" 200 275 0.000827
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:54] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGjcT&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 192 0.000960
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:54] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGjcX&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 196 0.000708
(185715) accepted ('127.0.0.1', 45890)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:55] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGjt8&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 192 0.000617
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 45900)
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:55] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGjt9&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 157 0.000618
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:55] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGk04&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 157 0.000268
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:01:56] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbJGk9U&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 157 0.000240
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
101.87.252.115,127.0.0.1 - - [16/Sep/2025 16:17:55] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=SmogL1S86UeH8buqAAAJ HTTP/1.1" 200 0 960.067428
(185715) accepted ('127.0.0.1', 53912)
180.101.244.13,127.0.0.1 - - [16/Sep/2025 16:59:16] "GET / HTTP/1.1" 302 351 0.006999
220.196.160.83,127.0.0.1 - - [16/Sep/2025 16:59:16] "GET / HTTP/1.1" 302 351 0.000767
180.101.245.252,127.0.0.1 - - [16/Sep/2025 16:59:16] "GET /login HTTP/1.1" 200 1835 0.004592
42.193.132.157,127.0.0.1 - - [16/Sep/2025 16:59:17] "GET /static/js/login.js HTTP/1.1" 200 3557 0.002909
220.196.160.144,127.0.0.1 - - [16/Sep/2025 16:59:17] "GET /login HTTP/1.1" 200 1835 0.000856
106.52.65.240,127.0.0.1 - - [16/Sep/2025 16:59:17] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001178
220.196.160.83,127.0.0.1 - - [16/Sep/2025 16:59:37] "GET / HTTP/1.1" 302 351 0.000812
220.196.160.83,127.0.0.1 - - [16/Sep/2025 16:59:37] "GET /login HTTP/1.1" 200 1835 0.000806
220.196.160.83,127.0.0.1 - - [16/Sep/2025 16:59:37] "GET /static/css/login.css HTTP/1.1" 200 3791 0.001815
(185715) accepted ('127.0.0.1', 56936)
220.196.160.83,127.0.0.1 - - [16/Sep/2025 16:59:37] "GET /static/js/login.js HTTP/1.1" 200 3557 0.000926
180.101.244.16,127.0.0.1 - - [16/Sep/2025 16:59:40] "GET / HTTP/1.1" 302 351 0.003076
180.101.244.16,127.0.0.1 - - [16/Sep/2025 16:59:41] "GET /login HTTP/1.1" 200 1835 0.000797
180.101.244.16,127.0.0.1 - - [16/Sep/2025 16:59:41] "GET /static/css/login.css HTTP/1.1" 200 3791 0.001276
180.101.244.16,127.0.0.1 - - [16/Sep/2025 16:59:41] "GET /static/js/login.js HTTP/1.1" 200 3557 0.000882
(185715) accepted ('127.0.0.1', 59638)
123.6.49.50,127.0.0.1 - - [16/Sep/2025 17:45:04] "GET / HTTP/1.1" 302 351 0.004425
123.6.49.50,127.0.0.1 - - [16/Sep/2025 17:45:04] "GET /login HTTP/1.1" 200 1835 0.002219
123.6.49.50,127.0.0.1 - - [16/Sep/2025 17:45:04] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001412
(185715) accepted ('127.0.0.1', 59652)
123.6.49.50,127.0.0.1 - - [16/Sep/2025 17:45:04] "GET /static/css/login.css HTTP/1.1" 200 3791 0.003105
123.6.49.44,127.0.0.1 - - [16/Sep/2025 17:45:10] "GET /favicon.ico HTTP/1.1" 404 331 0.002778
27.115.124.112,127.0.0.1 - - [16/Sep/2025 17:45:11] "GET /favicon.ico HTTP/1.1" 404 331 0.001624
123.6.49.47,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET / HTTP/1.1" 302 351 0.000800
123.6.49.47,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /login HTTP/1.1" 200 1835 0.000786
27.115.124.70,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /register HTTP/1.1" 200 1689 0.002584
27.115.124.70,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /static/css/login.css HTTP/1.1" 200 3791 0.001273
27.115.124.70,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /static/js/register.js HTTP/1.1" 200 1720 0.001667
123.6.49.47,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /static/css/login.css HTTP/1.1" 200 3791 0.001219
123.6.49.47,127.0.0.1 - - [16/Sep/2025 17:45:12] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001201
123.6.49.50,127.0.0.1 - - [16/Sep/2025 17:45:17] "GET /favicon.ico HTTP/1.1" 404 331 0.000770
(185715) accepted ('127.0.0.1', 53172)
27.115.124.5,127.0.0.1 - - [16/Sep/2025 17:51:56] "GET / HTTP/1.1" 302 351 0.001029
27.115.124.3,127.0.0.1 - - [16/Sep/2025 17:51:56] "GET /login HTTP/1.1" 200 1835 0.000818
27.115.124.5,127.0.0.1 - - [16/Sep/2025 17:51:57] "GET /favicon.ico HTTP/1.1" 404 331 0.000834
27.115.124.41,127.0.0.1 - - [16/Sep/2025 17:51:57] "GET /robots.txt HTTP/1.1" 404 331 0.000888
27.115.124.69,127.0.0.1 - - [16/Sep/2025 17:51:58] "GET /sitemap.xml HTTP/1.1" 404 331 0.000799
27.115.124.112,127.0.0.1 - - [16/Sep/2025 17:53:14] "GET / HTTP/1.1" 302 351 0.000926
27.115.124.67,127.0.0.1 - - [16/Sep/2025 17:53:34] "GET /login HTTP/1.1" 200 1835 0.000883
27.115.124.33,127.0.0.1 - - [16/Sep/2025 17:53:38] "GET /favicon.ico HTTP/1.1" 404 331 0.001163
(185715) accepted ('127.0.0.1', 55860)
167.99.77.32,127.0.0.1 - - [16/Sep/2025 18:11:35] "GET / HTTP/1.1" 302 351 0.001348
167.99.77.32,127.0.0.1 - - [16/Sep/2025 18:11:35] "GET /login HTTP/1.1" 200 1835 0.001791
167.99.77.32,127.0.0.1 - - [16/Sep/2025 18:11:35] "GET /static/js/login.js HTTP/1.1" 200 3557 0.002767
(185715) accepted ('127.0.0.1', 36792)
196.251.70.47,127.0.0.1 - - [16/Sep/2025 21:26:55] "GET /.env HTTP/1.1" 404 331 0.000775
(185715) accepted ('127.0.0.1', 37080)
185.177.72.45,127.0.0.1 - - [16/Sep/2025 22:39:16] "GET / HTTP/1.1" 302 351 0.001164
185.177.72.45,127.0.0.1 - - [16/Sep/2025 22:39:16] "GET /login HTTP/1.1" 200 1835 0.000922
185.177.72.45,127.0.0.1 - - [16/Sep/2025 22:39:22] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001013
185.177.72.45,127.0.0.1 - - [16/Sep/2025 22:39:24] "GET /static/js/login.js HTTP/1.1" 200 3557 0.001304
185.177.72.45,127.0.0.1 - - [16/Sep/2025 22:39:24] "GET /.git/config HTTP/1.1" 404 331 0.000836
(185715) accepted ('127.0.0.1', 58636)
54.237.85.94,127.0.0.1 - - [16/Sep/2025 23:03:57] "GET / HTTP/1.1" 302 351 0.000804
54.237.85.94,127.0.0.1 - - [16/Sep/2025 23:03:57] "GET /login HTTP/1.1" 200 1835 0.000753
(185715) accepted ('127.0.0.1', 57070)
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:45] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuKo HTTP/1.1" 200 275 0.000340
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:45] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuRo&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 192 0.000700
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:45] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuRq&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 196 0.000223
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:46] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuTi&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 192 0.000372
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 57072)
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:46] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuTi.0&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 157 0.241678
58.198.188.146,127.0.0.1 - - [16/Sep/2025 23:45:46] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbKwuZN&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 157 0.000381
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
58.198.188.146,127.0.0.1 - - [17/Sep/2025 03:39:10] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=5YLu2hNGUKkeftJPAAAL HTTP/1.1" 200 0 14004.575564
(185715) accepted ('127.0.0.1', 41646)
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:45:49] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbLnpKT HTTP/1.1" 200 275 0.000355
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:45:49] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbLnqu8&sid=gVzDTgTtIF0OYTTiAAAN HTTP/1.1" 200 192 0.000543
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:45:49] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbLnquK&sid=gVzDTgTtIF0OYTTiAAAN HTTP/1.1" 200 196 0.000240
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:45:49] "POST /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbLnqwQ&sid=gVzDTgTtIF0OYTTiAAAN HTTP/1.1" 200 192 0.000422
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/hub.py", line 471, in fire_timers
timer()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/hubs/timer.py", line 59, in __call__
cb(*args, **kw)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/eventlet/greenthread.py", line 272, in main
result = function(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 591, in _handle_event_internal
r = server._trigger_event(data[0], namespace, sid, *data[1:])
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 53, in on_login
user_id = uuid2username[user_uuid]
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
(185715) accepted ('127.0.0.1', 41652)
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:45:49] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=polling&t=PbLnqwU&sid=gVzDTgTtIF0OYTTiAAAN HTTP/1.1" 200 157 0.285216
disconnect handler error
Traceback (most recent call last):
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/engineio/server.py", line 450, in run_handler
return self.handlers[event](*args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 671, in _handle_eio_disconnect
self._handle_disconnect(eio_sid, n, reason)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 568, in _handle_disconnect
self._trigger_event('disconnect', namespace, sid,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/socketio/server.py", line 627, in _trigger_event
return handler.trigger_event(event, *args)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/namespace.py", line 26, in trigger_event
return self.socketio._handle_event(handler, event, self.namespace,
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_socketio/__init__.py", line 835, in _handle_event
ret = handler(*args)
File "/home/flask/hsamooc/code-agent/Html/apps/sockets/namespaces.py", line 150, in on_disconnect
user_uuid2chatmanager[uuid].disconnect(uuid)
KeyError: 'user_a24fccb3-d4b7-4716-bda5-5801b8cedd08'
219.228.146.148,127.0.0.1 - - [17/Sep/2025 03:46:44] "GET /socket.io/?user_uuid=user_a24fccb3-d4b7-4716-bda5-5801b8cedd08&folder=%2Fhome%2Fcake%2F68bacdfadf5aeae0912f7f18%2F%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%2F%E4%BA%8C%E5%88%86&EIO=4&transport=websocket&sid=gVzDTgTtIF0OYTTiAAAN HTTP/1.1" 200 0 55.351826
(185715) accepted ('127.0.0.1', 35708)
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:40:08] "GET /favicon.ico HTTP/1.1" 404 331 0.001202
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:40:09] "GET /favicon.ico HTTP/1.1" 404 331 0.001042
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:40:15] "GET /favicon.ico HTTP/1.1" 404 331 0.001459
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:40:40] "GET /favicon.ico HTTP/1.1" 404 331 0.001429
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:40:40] "GET /favicon.ico HTTP/1.1" 404 331 0.001089
(185715) accepted ('127.0.0.1', 47806)
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:42:45] "GET /?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 304 162 0.000592
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:43:07] "GET /favicon.ico HTTP/1.1" 404 331 0.001448
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:43:07] "GET /favicon.ico HTTP/1.1" 404 331 0.000793
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:44:50] "GET /favicon.ico HTTP/1.1" 404 331 0.001238
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:44:50] "GET /favicon.ico HTTP/1.1" 404 331 0.000915
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:45:19] "GET /favicon.ico HTTP/1.1" 404 331 0.002353
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:45:20] "GET /favicon.ico HTTP/1.1" 404 331 0.001941
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:47:09] "GET /favicon.ico HTTP/1.1" 404 331 0.001026
59.78.194.184,127.0.0.1 - - [17/Sep/2025 04:47:10] "GET /favicon.ico HTTP/1.1" 404 331 0.000903
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask/app.py", line 1514, in wsgi_app
response = self.handle_exception(e)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_cors/extension.py", line 176, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask/app.py", line 1511, in wsgi_app
response = self.full_dispatch_request()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask/app.py", line 919, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask_cors/extension.py", line 176, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask/app.py", line 917, in full_dispatch_request
rv = self.dispatch_request()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/flask/app.py", line 902, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "/home/flask/hsamooc/code-agent/Html/apps/auth/decorators.py", line 96, in wrapper
return func(*args, **kwargs)
File "/home/flask/hsamooc/code-agent/Html/apps/views/material.py", line 91, in rename_material
if rename_material_structure(material_id, is_chapter, chapter_name, lesson_name, new_name):
File "/home/flask/hsamooc/code-agent/Html/apps/services/course_service.py", line 124, in rename_material_structure
mongo.db.materials.update_one(
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/collection.py", line 1336, in update_one
self._update_retryable(
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/collection.py", line 1118, in _update_retryable
return self._database.client._retryable_write(
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/mongo_client.py", line 2082, in _retryable_write
return self._retry_with_session(retryable, func, s, bulk, operation, operation_id)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/mongo_client.py", line 1968, in _retry_with_session
return self._retry_internal(
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/_csot.py", line 125, in csot_wrapper
return func(self, *args, **kwargs)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/mongo_client.py", line 2014, in _retry_internal
).run()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/mongo_client.py", line 2765, in run
return self._read() if self._is_read else self._write()
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/mongo_client.py", line 2897, in _write
return self._func(self._session, conn, self._retryable) # type: ignore
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/collection.py", line 1098, in _update
return self._update(
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/synchronous/collection.py", line 1059, in _update
_check_write_command_response(result)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/helpers_shared.py", line 322, in _check_write_command_response
_raise_last_write_error(write_errors)
File "/home/flask/hsamooc/code-agent/.venv/lib/python3.10/site-packages/pymongo/helpers_shared.py", line 293, in _raise_last_write_error
raise WriteError(error.get("errmsg"), error.get("code"), error)
pymongo.errors.WriteError: No array filter found for identifier 'c' in path 'chapters.$[c].lessons.$[l].lesson_name', full error: {'index': 0, 'code': 2, 'errmsg': "No array filter found for identifier 'c' in path 'chapters.$[c].lessons.$[l].lesson_name'"}
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:46:25] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 500 41828 0.271542
* Detected change in '/home/flask/hsamooc/code-agent/Html/apps/services/course_service.py', reloading
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
[2025-09-19 08:48:07,652] INFO in __init__: Shutting down gracefully (atexit)...
[2025-09-19 08:48:07,652] INFO in __init__: Cleanup finished (atexit).
* Restarting with stat
* Debugger is active!
* Debugger PIN: 468-851-104
(63541) wsgi starting up on http://0.0.0.0:5551
(63541) accepted ('127.0.0.1', 35916)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:13] "GET /teacherboard HTTP/1.1" 302 351 0.001984
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:13] "GET /login HTTP/1.1" 200 1835 0.003347
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:13] "GET /static/css/login.css HTTP/1.1" 304 184 0.005928
(63541) accepted ('127.0.0.1', 35926)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:13] "GET /static/js/login.js HTTP/1.1" 304 183 0.001162
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:13] "GET /favicon.ico HTTP/1.1" 404 331 0.001291
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:14] "GET /favicon.ico HTTP/1.1" 404 331 0.000778
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:18] "POST /login_post HTTP/1.1" 200 428 0.458499
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:18] "GET /dashboard HTTP/1.1" 200 8967 0.132572
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:18] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001266
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:18] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001203
(63541) accepted ('127.0.0.1', 35928)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:18] "GET /static/js/dashboard.js HTTP/1.1" 304 187 0.000945
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /switch-role/student HTTP/1.1" 302 372 0.001335
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /teacherboard HTTP/1.1" 200 8112 0.194199
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001640
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001162
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.001760
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001020
(63541) accepted ('127.0.0.1', 35936)
(63541) accepted ('127.0.0.1', 35944)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001164
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001173
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:19] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000928
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:20] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001401
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:20] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.000934
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:20] "GET /favicon.ico HTTP/1.1" 404 331 0.000924
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:20] "GET /favicon.ico HTTP/1.1" 404 331 0.000873
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:20] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.189338
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:23] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252192
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /teacherboard HTTP/1.1" 200 8112 0.189347
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001523
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.001231
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.001040
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000870
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000836
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000793
(63541) accepted ('127.0.0.1', 40206)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001373
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 199 0.001976
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:30] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001053
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:31] "GET /favicon.ico HTTP/1.1" 404 331 0.001070
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:31] "GET /favicon.ico HTTP/1.1" 404 331 0.000748
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:32] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1804 0.189434
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:48:37] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252380
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /teacherboard HTTP/1.1" 200 8112 0.189656
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001245
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001041
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000848
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000778
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000735
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000731
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001352
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001221
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:55] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16405 0.001146
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:56] "GET /favicon.ico HTTP/1.1" 404 331 0.000953
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:56] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.189270
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:49:56] "GET /favicon.ico HTTP/1.1" 404 331 0.000804
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /teacherboard HTTP/1.1" 200 8112 0.189517
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001582
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.001024
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000954
(63541) accepted ('127.0.0.1', 34402)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001091
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000835
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000843
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001308
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001190
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:28] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16311 0.001041
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:29] "GET /favicon.ico HTTP/1.1" 404 331 0.001103
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:30] "GET /favicon.ico HTTP/1.1" 404 331 0.000762
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:30] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.189908
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:33] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252504
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /teacherboard HTTP/1.1" 200 8112 0.189437
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001256
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.001118
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/js/modelinput.js HTTP/1.1" 304 186 0.000852
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000778
(63541) accepted ('127.0.0.1', 53280)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000807
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000765
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001078
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001381
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001239
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:40] "GET /favicon.ico HTTP/1.1" 404 331 0.000978
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:41] "GET /favicon.ico HTTP/1.1" 404 331 0.000789
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:51:41] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1804 0.189946
(63541) accepted ('127.0.0.1', 52328)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /teacherboard HTTP/1.1" 200 8112 0.189211
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001388
(63541) accepted ('127.0.0.1', 52330)
(63541) accepted ('127.0.0.1', 52346)
(63541) accepted ('127.0.0.1', 52350)
(63541) accepted ('127.0.0.1', 52364)
(63541) accepted ('127.0.0.1', 52372)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001132
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000864
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000798
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/js/modelinput.js HTTP/1.1" 200 5107 0.001002
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000748
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001206
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001227
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16369 0.001071
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:06] "GET /favicon.ico HTTP/1.1" 404 331 0.000983
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验, 效率的重要性与实践验证
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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 - - [19/Sep/2025 08:57:07] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1804 0.189503
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:07] "GET /favicon.ico HTTP/1.1" 404 331 0.000793
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:11] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252438
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /teacherboard HTTP/1.1" 200 8112 0.199300
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001221
(63541) accepted ('127.0.0.1', 42520)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/js/modelinput.js HTTP/1.1" 304 185 0.001377
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000823
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000747
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000744
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000703
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:23] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000724
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:24] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16283 0.001289
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:24] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001001
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:24] "GET /favicon.ico HTTP/1.1" 404 331 0.001050
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:24] "GET /favicon.ico HTTP/1.1" 404 331 0.000786
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:24] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.189304
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:28] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252404
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /teacherboard HTTP/1.1" 200 8112 0.190078
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001365
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000978
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000821
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000765
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/js/modelinput.js HTTP/1.1" 304 185 0.000786
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000742
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000731
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001426
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:36] "GET /static/js/teacher_course_setting.js HTTP/1.1" 304 201 0.001025
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:37] "GET /favicon.ico HTTP/1.1" 404 331 0.000997
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:37] "GET /favicon.ico HTTP/1.1" 404 331 0.001210
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:37] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1804 0.189429
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:57:41] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252346
(63541) accepted ('127.0.0.1', 60130)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:58] "GET /teacherboard HTTP/1.1" 200 8112 0.189686
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001437
(63541) accepted ('127.0.0.1', 60144)
(63541) accepted ('127.0.0.1', 60154)
(63541) accepted ('127.0.0.1', 60166)
(63541) accepted ('127.0.0.1', 60180)
(63541) accepted ('127.0.0.1', 60192)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.001067
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000886
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000826
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/js/modelinput.js HTTP/1.1" 304 185 0.000817
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000754
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.001889
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001217
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16132 0.001368
59.78.194.184,127.0.0.1 - - [19/Sep/2025 08:59:59] "GET /favicon.ico HTTP/1.1" 404 331 0.000981
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:00] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1810 0.193192
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:00] "GET /favicon.ico HTTP/1.1" 404 331 0.001738
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:02] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252871
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /teacherboard HTTP/1.1" 200 8112 0.189893
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/css/teacherboard.css HTTP/1.1" 304 191 0.001222
(63541) accepted ('127.0.0.1', 55966)
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/image/algorithm/book_cover.png HTTP/1.1" 304 191 0.000896
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/css/teacher_course_setting.css HTTP/1.1" 304 201 0.000807
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/css/modelinput.css HTTP/1.1" 304 188 0.000743
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/js/modelinput.js HTTP/1.1" 304 185 0.000727
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/css/dashboard.css HTTP/1.1" 304 187 0.000717
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/js/course_current.js HTTP/1.1" 304 191 0.000754
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/js/teacherboard.js HTTP/1.1" 304 190 0.001206
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /static/js/teacher_course_setting.js HTTP/1.1" 200 16139 0.001137
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /favicon.ico HTTP/1.1" 404 331 0.000966
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:27] "GET /favicon.ico HTTP/1.1" 404 331 0.000869
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:28] "GET /materials/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 1804 0.189548
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验, 效率的重要性与实践验证
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验, 效率的重要性与实践验证
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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')])]
rename_material: False, 算法效率, 效率的重要性与实践验证, 效率的重要性与实践验
name='算法分析与设计' description='测试:算法分析与设计课程' teacher_id='TCake' created_at=datetime.datetime(2025, 9, 5, 19, 48, 10, 16000) updated_at=datetime.datetime(2025, 9, 19, 7, 40, 45, 677000) 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_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 - - [19/Sep/2025 09:00:30] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 404 283 0.189712
59.78.194.184,127.0.0.1 - - [19/Sep/2025 09:00:37] "POST /materials/structure/rename/68bacdfadf5aeae0912f7f18 HTTP/1.1" 200 276 0.252364

View File

@@ -92,6 +92,44 @@ def add_material_chapter(material_id, chapter_name, teacher_id):
{'$push': {'chapters': {'chapter_name': chapter_name, 'lessons': []}}})
return True
def rename_material_structure(material_id, is_chapter, chapter_name, lesson_name, new_name):
mongo = current_app.extensions["mongo"]
material = mongo.db.materials.find_one({'_id': ObjectId(material_id)})
# 先检查是否存在
if is_chapter:
for chapter in material['chapters']:
if chapter['chapter_name'] == chapter_name:
break
return False
for chapter in material['chapters']:
if chapter['chapter_name'] == new_name:
return False
else:
for chapter in material['chapters']:
if chapter['chapter_name'] == chapter_name:
break
return False
for lesson in chapter['lessons']:
if lesson['lesson_name'] == lesson_name:
break
for lesson in chapter['lessons']:
if lesson['lesson_name'] == new_name:
return False
if is_chapter:
mongo.db.materials.update_one(
{'_id': ObjectId(material_id)},
{'$set': {'chapters.$[c].chapter_name': new_name}},
array_filters=[{'c.chapter_name': chapter_name}]
)
else:
mongo.db.materials.update_one(
{'_id': ObjectId(material_id)},
{'$set': {'chapters.$[c].lessons.$[l].lesson_name': new_name}},
array_filters=[{'c.chapter_name': chapter_name}, {'l.lesson_name': lesson_name}]
)
return True
def delete_material_chapter_lesson(material_id, chapter_name, lesson_name, teacher_id):
"""
删除指定课程的课时。

View File

@@ -23,6 +23,21 @@
cursor: grabbing;
}
/* 改名模式下两类元素的高亮与交互 */
#chapter-list.chapter-rename-mode .chapter-item,
#chapter-list.chapter-rename-mode .lesson-item {
border: 1px solid #dc2626;
border-radius: 6px;
padding: 4px 6px;
cursor: pointer;
transition: background-color .15s ease, box-shadow .15s ease;
}
#chapter-list.chapter-rename-mode .chapter-item:hover,
#chapter-list.chapter-rename-mode .lesson-item:hover {
background: rgba(220,38,38,.06);
box-shadow: 0 0 0 2px rgba(220,38,38,.15) inset;
}
.dragging { opacity: .6; }
/* 放置位置提示线(在元素顶部/底部) */
@@ -37,4 +52,14 @@
.chapter-header {
display: block; /* 使元素成为块级元素,占满整行 */
/* 文字默认左对齐无需额外设置text-align: left */
}
}
/* 改名按钮的激活态 */
.rename-btn[aria-pressed="true"] {
background: rgba(220,38,38,.12);
outline: 2px solid #dc2626;
}
.reorder-btn[aria-pressed="true"] {
background: rgba(220,38,38,.12);
outline: 2px solid #dc2626;
}

View File

@@ -110,6 +110,8 @@
background-color: #f0f0f0;
border: 1px dashed #bbb;
}
/* 模态框背景 */
.modal {
display: none; /* 初始时隐藏 */

View File

@@ -45,24 +45,43 @@
const cancelBtn = title_change_modal.querySelector('#cancel-btn');
const errBox = title_change_modal.querySelector('#title-error');
const prevFocus = document.activeElement;
const setLoading = (on) => {
okBtn.disabled = on;
cancelBtn.disabled = on;
okBtn.textContent = on ? '保存中…' : '确定';
};
const close = () => {
document.body.removeChild(backdrop);
if (prevFocus && prevFocus.focus) prevFocus.focus();
};
const submit = () => {
const raw = input.value;
const result = onSubmit ? onSubmit(raw) : { ok: true };
if (result && result.ok) {
close();
} else if (result && result.message) {
errBox.textContent = result.message;
input.setAttribute('aria-invalid', 'true');
input.focus();
}
errBox.textContent = '';
setLoading(true);
const maybePromise = onSubmit ? onSubmit(input.value) : { ok: true };
Promise
.resolve(maybePromise)
.then(result => {
if (result && result.ok) {
close();
} else {
// 显示错误但不关闭
const msg = result && result.message ? result.message : '提交失败';
errBox.textContent = msg;
input.setAttribute('aria-invalid', 'true');
input.focus();
}
})
.catch(err => {
console.error('Submit error:', err);
errBox.textContent = '提交异常,请稍后再试';
input.setAttribute('aria-invalid', 'true');
input.focus();
})
.finally(() => setLoading(false));
};
okBtn.addEventListener('click', submit);
cancelBtn.addEventListener('click', close);
backdrop.addEventListener('click', (e) => {

View File

@@ -8,6 +8,7 @@ toggleBtn.addEventListener('click', () => {
});
function enableReorderMode() {
setRenameMode(false);
toggleBtn.setAttribute('aria-pressed', 'true');
chapterListEl.classList.add('reorder-mode');
makeChaptersDraggable(true);
@@ -32,6 +33,147 @@ function disableReorderMode() {
btn.style.display = 'block';
});
}
const chapterList = document.getElementById('chapter-list');
const btnReorder = document.getElementById('toggle-reorder');
const btnRename = document.getElementById('toggle-rename');
function setReorderMode(enabled) {
if (enabled) {
enableReorderMode();
} else {
disableReorderMode();
}
}
function setRenameMode(enabled) {
btnRename?.setAttribute('aria-pressed', String(enabled));
chapterList.classList.toggle('chapter-rename-mode', enabled);
// const chapterContainers = document.querySelectorAll('li.chapter-item');
// const lessonContainers = document.querySelectorAll('li.lesson-item');
// chapterContainers.forEach(container => {
// container.classList.toggle('chapter-rename-mode', enabled);
// });
// lessonContainers.forEach(container => {
// container.classList.toggle('chapter-rename-mode', enabled);
// });
if (enabled) {
document.querySelectorAll('.add-lesson-btn').forEach(btn => {
btn.style.display = 'none';
});
document.querySelectorAll('.add-chapter-btn').forEach(btn => {
btn.style.display = 'none';
});
} else {
document.querySelectorAll('.add-lesson-btn').forEach(btn => {
btn.style.display = 'block';
});
document.querySelectorAll('.add-chapter-btn').forEach(btn => {
btn.style.display = 'block';
});
}
}
// —— 点击“改名模式”按钮 —— //
btnRename?.addEventListener('click', (e) => {
e.preventDefault();
const willEnable = btnRename.getAttribute('aria-pressed') !== 'true';
if (willEnable && btnReorder?.getAttribute('aria-pressed') === 'true') {
setReorderMode(false);
}
setRenameMode(willEnable);
});
// 获取展示文字chapter-item 用 <strong>lesson-item 用 <span>
function getDisplayText(el) {
if (el.classList.contains('chapter-item')) {
return (el.querySelector('strong')?.textContent ?? '').trim();
}
if (el.classList.contains('lesson-item')) {
return (el.querySelector('span')?.textContent ?? '').trim();
}
// 兜底
return '';
}
// 设置展示文字chapter-item 用 <strong>lesson-item 用 <span>
function setDisplayText(el, text) {
if (el.classList.contains('chapter-item')) {
let node = el.querySelector('strong');
if (!node) {
node = document.createElement('strong');
el.prepend(node);
}
node.textContent = text;
return;
}
if (el.classList.contains('lesson-item')) {
let node = el.querySelector('span');
if (!node) {
node = document.createElement('span');
el.prepend(node);
}
node.textContent = text;
return;
}
}
// —— 事件代理:改名模式下点击 li 触发重命名 —— //
chapterList.addEventListener('click', (e) => {
if (btnRename?.getAttribute('aria-pressed') !== 'true') return; // 非改名模式
const li = e.target.closest?.('li.chapter-item, li.lesson-item');
if (!li) return;
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation(); // 若你担心同层还有其他捕获监听,也可用这个更狠的
const isChapter = li.classList.contains('chapter-item');
const isLesson = li.classList.contains('lesson-item');
// 读取旧名(章节:显示文字;课时:优先 data-lesson-name
const oldName = isLesson
? (li.dataset.lessonName || getDisplayText(li))
: getDisplayText(li);
openTitleEditor({
title: isChapter ? '修改章节名称' : '修改课时名称',
initialValue: oldName,
onSubmit: async (value) => {
const res = validateTitle(value);
// 先持久化,成功后在本地同步
const resSave = await fetch(`/materials/structure/rename/${encodeURIComponent(EDIT_COURSE_CURRENT.material_id)}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ is_chapter: isChapter, chapter_name: isChapter ? oldName : li.dataset.chapterName, lesson_name: isChapter ? "" : li.dataset.lessonName, new_name: value })
})
const data = await resSave.json();
if (!data.ok) return { ok: false, message: data.message };
const newName = res.value;
if (isChapter) { // 将章节改名同步到本地
setDisplayText(li, newName);
if (li.dataset.chapterName !== undefined) {
li.dataset.chapterName = newName;
}
const scope = li.querySelectorAll?.('li.lesson-item');
if (scope && scope.length) {
scope.forEach(item => {
item.dataset.chapterName = newName;
});
}
}
if (isLesson) { // 将课时改名同步到本地
setDisplayText(li, newName);
li.dataset.lessonName = newName;
}
return { ok: true };
}
});
});
/* 工具选择器 */
function getChapterItems() {

View File

@@ -3,12 +3,12 @@ let material_id = null;
function lessonTemplate(material_id,chapter_name,lesson_name) {
return `
<li class="lesson-item" data-material-id="${material_id}" data-chapter-name="${chapter_name}" data-lesson-name="${lesson_name}">
<span class="lesson-text" onclick="editLesson('${material_id}','${chapter_name}','${lesson_name}')">${lesson_name}
<button class="icon-btn edit-btn" onclick="editLesson('${material_id}','${chapter_name}','${lesson_name}')">
<span class="lesson-text" onclick="editLesson(this)">${lesson_name}
<button class="icon-btn edit-btn" onclick="editLesson(this)">
<i class="fas fa-pencil-alt"></i>
</button>
</span>
<div class="delete-btn-container" onclick="deleteLesson('${material_id}','${chapter_name}','${lesson_name}')">
<div class="delete-btn-container" onclick="deleteLesson(this)">
<button class="icon-btn delete-btn">
<i class="fas fa-trash-alt"></i>
</button>
@@ -216,7 +216,20 @@ function checkAndAddLesson(input, chapterTitle, addButton) {
})
}
function deleteLesson(material_id,chapter_name,lesson_name) {
function deleteLesson(elemOrEvent) {
const el = elemOrEvent?.target ? elemOrEvent.target : elemOrEvent;
const li = el?.closest?.('li.lesson-item');
if (!li) {
console.warn('未找到父级 lesson-item');
return;
}
const { materialId, chapterName, lessonName } = li.dataset;
const material_id = materialId;
const chapter_name = chapterName;
const lesson_name = lessonName;
if (!window.confirm(`确认删除课时「${lesson_name}」吗?`)){
return;
}
const lessonItems = document.querySelectorAll('.lesson-item');
lessonItems.forEach(item => {
if (item.dataset.lessonName === lesson_name && item.dataset.chapterName === chapter_name && item.dataset.materialId === material_id) {
@@ -242,7 +255,21 @@ function deleteLesson(material_id,chapter_name,lesson_name) {
}
function editLesson(material_id,chapter_name,lesson_name) {
function editLesson(elemOrEvent) {
const el = elemOrEvent?.target ? elemOrEvent.target : elemOrEvent;
const li = el?.closest?.('li.lesson-item');
if (!li) {
console.warn('未找到父级 lesson-item');
return;
}
const { materialId, chapterName, lessonName } = li.dataset;
const material_id = materialId;
const chapter_name = chapterName;
const lesson_name = lessonName;
const renameMode = document.getElementById('toggle-rename').getAttribute('aria-pressed') === 'true';
if (renameMode) {
return;
}
// 编辑课时的逻辑
alert("编辑课时: " + lesson_name);
window.location.href = `/api/materials/${material_id}/chapters/${chapter_name}/lessons/${lesson_name}`;

View File

@@ -7,8 +7,11 @@
<link rel="stylesheet" href="/static/css/teacherboard.css">
<link rel="stylesheet" href="/static/css/dashboard.css">
<link rel="stylesheet" href="/static/css/teacher_course_setting.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">
<script src="/static/js/modelinput.js"></script>
</head>
<body onload="onTeacherboardPageLoad()">
@@ -18,22 +21,6 @@
<div class="teacherboard">
<h2 class="teacherboard-title">—— 我的课程 ——</h2>
<div class="course-cards" id="course-cards">
<!-- 每个课程的卡片 -->
<div class="course-card" onclick="openCourseDetails('algorithm')">
<img src="/static/image/algorithm/book_cover.png" alt="课程封面" class="course-image">
<div class="course-info">
<h3 class="course-name">算法分析与设计</h3>
<p class="course-description">学习基本的算法知识概念,与算法实现。</p>
</div>
</div>
<!-- 继续添加其他课程卡片 -->
<div class="course-card" onclick="openCourseDetails('data-structures')">
<img src="/static/image/algorithm/book_cover.png" alt="课程封面" class="course-image">
<div class="course-info">
<h3 class="course-name">数据结构与算法</h3>
<p class="course-description">深入学习数据结构和算法设计。</p>
</div>
</div>
<!-- 动态加载课程卡片 -->
{% for course in materials %}
<div class="course-card" onclick="openCourseDetails('{{ course._id }}')">
@@ -67,6 +54,9 @@
<button id="toggle-reorder" class="reorder-btn" title="设置章节顺序" aria-pressed="false">
<i class="fa-solid fa-arrow-up-short-wide"></i>
</button>
<button id="toggle-rename" class="rename-btn" title="改名模式" aria-pressed="false">
<i class="fa-solid fa-pen-to-square"></i>
</button>
</h3>
<ul id="chapter-list">
<div id="loading-message">

View File

@@ -1,5 +1,5 @@
from flask import Blueprint, request, jsonify, current_app, session, render_template, session
from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson, delete_material_chapter_lesson, reorder_material_structure
from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson, delete_material_chapter_lesson, reorder_material_structure, rename_material_structure
from ..auth.decorators import require_role
from ..services.cos_service import upload_file
bp = Blueprint('material', __name__)
@@ -79,6 +79,19 @@ def add_lesson(material_id):
return jsonify({"message": "课时添加成功"}), 200
return jsonify({"message": "课时添加失败"}), 404
@bp.route('/materials/structure/rename/<material_id>', methods=['POST'])
@require_role(roles="teacher")
def rename_material(material_id):
data = request.get_json()
is_chapter = data.get('is_chapter')
chapter_name = data.get('chapter_name')
lesson_name = data.get('lesson_name')
new_name = data.get('new_name')
print(f"rename_material: {is_chapter}, {chapter_name}, {lesson_name}, {new_name}")
if rename_material_structure(material_id, is_chapter, chapter_name, lesson_name, new_name):
return jsonify({"message": "教材重命名成功"}), 200
return jsonify({"message": "教材重命名失败"}), 404
@bp.route('/materials/deletelesson/<material_id>', methods=['DELETE'])
@require_role(roles="teacher")
def delete_lesson(material_id):