From 24f191d5a533a6597bf5cb87c8a97a2df34bdc81 Mon Sep 17 00:00:00 2001 From: Cai Date: Fri, 19 Sep 2025 09:06:37 +0000 Subject: [PATCH] rename chapter/lesson --- Html/.log | 815 +++++++++--------- Html/apps/services/course_service.py | 38 + .../static/css/teacher_course_setting.css | 27 +- Html/apps/static/css/teacherboard.css | 2 + Html/apps/static/js/modelinput.js | 41 +- Html/apps/static/js/teacher_course_setting.js | 142 +++ Html/apps/static/js/teacherboard.js | 37 +- Html/apps/templates/teacherboard.html | 22 +- Html/apps/views/material.py | 15 +- 9 files changed, 709 insertions(+), 430 deletions(-) diff --git a/Html/.log b/Html/.log index cbfebb2..7deb307 100644 --- a/Html/.log +++ b/Html/.log @@ -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 diff --git a/Html/apps/services/course_service.py b/Html/apps/services/course_service.py index 180ead3..77b7b1e 100644 --- a/Html/apps/services/course_service.py +++ b/Html/apps/services/course_service.py @@ -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): """ 删除指定课程的课时。 diff --git a/Html/apps/static/css/teacher_course_setting.css b/Html/apps/static/css/teacher_course_setting.css index bc08950..625e827 100644 --- a/Html/apps/static/css/teacher_course_setting.css +++ b/Html/apps/static/css/teacher_course_setting.css @@ -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 */ - } \ No newline at end of file + } + +/* 改名按钮的激活态 */ +.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; +} \ No newline at end of file diff --git a/Html/apps/static/css/teacherboard.css b/Html/apps/static/css/teacherboard.css index 0915ba5..695b13e 100644 --- a/Html/apps/static/css/teacherboard.css +++ b/Html/apps/static/css/teacherboard.css @@ -110,6 +110,8 @@ background-color: #f0f0f0; border: 1px dashed #bbb; } + + /* 模态框背景 */ .modal { display: none; /* 初始时隐藏 */ diff --git a/Html/apps/static/js/modelinput.js b/Html/apps/static/js/modelinput.js index 4e2ae95..b316156 100644 --- a/Html/apps/static/js/modelinput.js +++ b/Html/apps/static/js/modelinput.js @@ -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) => { diff --git a/Html/apps/static/js/teacher_course_setting.js b/Html/apps/static/js/teacher_course_setting.js index 53304c9..b4a0369 100644 --- a/Html/apps/static/js/teacher_course_setting.js +++ b/Html/apps/static/js/teacher_course_setting.js @@ -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 用 ,lesson-item 用 +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 用 ,lesson-item 用 +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() { diff --git a/Html/apps/static/js/teacherboard.js b/Html/apps/static/js/teacherboard.js index 5256aa9..0c07dd4 100644 --- a/Html/apps/static/js/teacherboard.js +++ b/Html/apps/static/js/teacherboard.js @@ -3,12 +3,12 @@ let material_id = null; function lessonTemplate(material_id,chapter_name,lesson_name) { return `
  • - ${lesson_name} - -
    +
    @@ -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}`; diff --git a/Html/apps/templates/teacherboard.html b/Html/apps/templates/teacherboard.html index 290f27b..8b06a57 100644 --- a/Html/apps/templates/teacherboard.html +++ b/Html/apps/templates/teacherboard.html @@ -7,8 +7,11 @@ + + + @@ -18,22 +21,6 @@

    —— 我的课程 ——

    - -
    - 课程封面 -
    -

    算法分析与设计

    -

    学习基本的算法知识概念,与算法实现。

    -
    -
    - -
    - 课程封面 -
    -

    数据结构与算法

    -

    深入学习数据结构和算法设计。

    -
    -
    {% for course in materials %}
    @@ -67,6 +54,9 @@ +
      diff --git a/Html/apps/views/material.py b/Html/apps/views/material.py index 817b423..8172c60 100644 --- a/Html/apps/views/material.py +++ b/Html/apps/views/material.py @@ -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/', 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/', methods=['DELETE']) @require_role(roles="teacher") def delete_lesson(material_id):