feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
#!/usr/bin/env python3
"""
验证考试设置功能是否正常工作
"""
import asyncio
import json
import httpx
from datetime import datetime
BASE_URL = "http://localhost:8000"
async def main():
async with httpx.AsyncClient() as client:
# 1. 登录获取token
print("=== 考试设置功能验证 ===\n")
print("1. 登录管理员账号...")
login_resp = await client.post(
f"{BASE_URL}/api/v1/auth/login",
json={"username": "admin", "password": "Admin123!"}
)
login_data = login_resp.json()
if login_data['code'] != 200:
print(f"登录失败: {login_data}")
return
token = login_data["data"]["token"]["access_token"]
headers = {"Authorization": f"Bearer {token}"}
print("✓ 登录成功\n")
# 2. 获取课程7的当前考试设置
print("2. 获取课程7的当前考试设置...")
get_resp = await client.get(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
headers=headers
)
get_data = get_resp.json()
if get_data['code'] == 200 and get_data['data']:
print("✓ 成功获取考试设置")
current = get_data['data']
print(f"\n当前设置:")
print(f" - 单选题: {current['single_choice_count']}")
print(f" - 多选题: {current['multiple_choice_count']}")
print(f" - 判断题: {current['true_false_count']}")
print(f" - 填空题: {current['fill_blank_count']}")
print(f" - 考试时长: {current['duration_minutes']}分钟")
print(f" - 难度等级: {current['difficulty_level']}")
print(f" - 是否启用: {'' if current['is_enabled'] else ''}")
print(f" - 更新时间: {current['updated_at']}")
else:
print(f"✗ 获取失败: {get_data}")
# 3. 测试更新功能
print("\n3. 测试更新考试设置...")
test_settings = {
"single_choice_count": 25,
"multiple_choice_count": 12,
"true_false_count": 10,
"fill_blank_count": 6,
"duration_minutes": 120,
"difficulty_level": 5,
"is_enabled": True
}
update_resp = await client.post(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
json=test_settings,
headers=headers
)
update_data = update_resp.json()
if update_data['code'] == 200:
print("✓ 成功更新考试设置")
# 4. 再次获取验证
print("\n4. 再次获取验证更新...")
verify_resp = await client.get(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
headers=headers
)
verify_data = verify_resp.json()
if verify_data['code'] == 200 and verify_data['data']:
updated = verify_data['data']
print("\n更新后的设置:")
print(f" - 单选题: {updated['single_choice_count']}")
print(f" - 多选题: {updated['multiple_choice_count']}")
print(f" - 判断题: {updated['true_false_count']}")
print(f" - 填空题: {updated['fill_blank_count']}")
print(f" - 考试时长: {updated['duration_minutes']}分钟")
print(f" - 难度等级: {updated['difficulty_level']}")
print(f" - 更新时间: {updated['updated_at']}")
# 验证是否正确更新
all_correct = (
updated['single_choice_count'] == test_settings['single_choice_count'] and
updated['multiple_choice_count'] == test_settings['multiple_choice_count'] and
updated['true_false_count'] == test_settings['true_false_count'] and
updated['fill_blank_count'] == test_settings['fill_blank_count'] and
updated['duration_minutes'] == test_settings['duration_minutes'] and
updated['difficulty_level'] == test_settings['difficulty_level']
)
if all_correct:
print("\n✅ 考试设置功能完全正常!数据能够正确保存和读取。")
else:
print("\n❌ 数据更新不正确!")
else:
print(f"✗ 验证失败: {verify_data}")
else:
print(f"✗ 更新失败: {update_data}")
# 5. 提示前端检查
print("\n=== 前端检查建议 ===")
print("如果前端仍然显示默认值而不是实际保存的值,请检查:")
print("1. 刷新页面F5后是否正确显示")
print("2. 浏览器控制台是否有错误")
print("3. Network面板中API请求是否成功")
print("4. 清除浏览器缓存后重试")
if __name__ == "__main__":
asyncio.run(main())