e42cfac3ce
feat: 班级号位数不合法直接报错,规则收敛到一处
...
原先班级号位数不对是静默处理的:get_class_name 猜前几位,class_list
根本不校验,填错只表现为登录页班级下拉查不到人。现在两个入口都报错。
- get_class_name 先用 \d+ 抓全再判位数,不合法抛 APIError。不能直接用
CLASS_NAME_RE 匹配,那样 ks251001 会"匹配成功"并悄悄取前 4 位,正是
要避免的猜测
- CreateEditWebsiteConfigSerializer 加 validate_class_list
- 位数规则收敛到 utils/shortcuts 的 CLASS_NAME_MIN/MAX_DIGITS 和
is_valid_class_name,两个调用方和错误文案都从常量拼
不以 ks+数字 开头的用户名(管理员、教师账号、kstest)仍返回 None 不报错,
只校验"看起来想当班级用户名"的。
批量导入的构造循环在 transaction.atomic() 之前,报错时一条都不入库。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-06 00:15:47 -06:00
625f2466e5
refactor: 统一用户名的 ks 班级前缀处理
...
同一个剥前缀函数在 submission 和 flowchart 的管理端各有一份逐字相同的
拷贝,conf 里还有一份内联写法,合并到 utils/shortcuts.strip_class_prefix。
改名是因为原名 get_real_name 和 UserProfile.real_name 字段、以及三个
serializer 里的同名方法都容易混。
行为上修了两处:
- 剥前缀改用 removeprefix,不再按长度硬切。班级号对不上时原样返回,
旧写法会从中间截出乱码(ks999王五 配 class_name=251 会切成「王五」)
- get_class_name 的正则从 \d+ 收紧到 \d{3,4},与前端
ButtonWithSearch 的 /^ks\d{3,4}/ 对齐。旧的贪婪匹配在姓名部分是纯
数字时会吃掉整串(ks251001 返回 251001 而不是 251)。顺带 re.search
换成 re.match,外层的 startswith 判断并进正则
正常数据(ks251张三、ks2510李四)新旧结果一致,已逐例对拍。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-05 23:58:13 -06:00
989b33d827
refactor: 移除 2FA 功能与三个冗余依赖
...
2FA 早已是死代码:TOTP 相关端点标注为前端未调用,前端唯一的
two_factor_auth 是硬编码 false,没有任何入口能打开它。
- 删除 TwoFactorAuthAPI、CheckTFARequiredAPI、_totp* 辅助函数、
TwoFactorAuthCodeSerializer 及各 serializer 的 tfa_code 字段
- 删除管理端写 two_factor_auth/tfa_token 的分支。登录已不再校验
TOTP,若保留写入路径,置 True 会变成静默的安全降级
- 删除 User.two_factor_auth / tfa_token 字段(迁移 0009)
- 移除 django-dbconn-retry:仅挂在 INSTALLED_APPS,代码零引用。
DATABASES 未配置 CONN_MAX_AGE(默认 0),本就没有持久连接需要
重连修复。要开持久连接用 Django 自带的 CONN_HEALTH_CHECKS
- requests 换成 httpx(openai 已经引入):删除废弃的
ReleaseNotesAPI,judge dispatcher 显式传 timeout=None 以保持
requests 原本的无超时行为,判题请求是同步等结果的
依赖净减 5 个:otpauth、qrcode、requests、charset-normalizer、
django-dbconn-retry
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-05 23:00:45 -06:00
3a9ab83ba5
style: ruff format 全仓库
...
行宽 180 下把历史遗留的折行表达式合并,无语义改动。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
2026-08-05 04:45:26 -06:00
f94d29cf93
feat: add Teacher Admin role to four-tier permission system
...
Introduces a four-tier role system: Regular User → Student Admin →
Teacher Admin → Super Admin. Teacher Admin can manage own contests,
problemsets, and view classroom data. Student Admin (renamed from Admin)
retains problem management only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-06-02 18:13:33 -06:00
57c0572fd9
async
2026-05-26 21:25:26 -06:00
028ea6e5f9
fmt
2026-04-23 13:57:56 -06:00
3c408040ff
update
2025-12-22 19:31:58 +08:00
6d32e5de1e
add sort
2025-10-05 16:43:54 +08:00
0d9d5d99f2
fix
2025-09-25 19:17:09 +08:00
a6d76a64c4
重构用户权限
2025-09-25 18:41:23 +08:00
aba908c0aa
add class_name when generate user
2025-09-21 20:14:17 +08:00
81663e705b
update
2025-08-30 15:06:00 +08:00
911c777348
reset password
2025-08-30 14:29:16 +08:00
74337ca10d
保存明文密码
2025-05-09 22:42:01 +08:00
8ded57cb46
fix
2025-04-30 10:02:26 +08:00
09e693bf25
后台可以筛选管理员
2025-04-30 09:51:19 +08:00
Beichi-CHs
d4b3a42f94
fix flake8 standard problems
2021-11-18 12:56:16 +08:00
Harry-zklcdc
cfb709f128
[Add] Import real_name when Import Users
2021-08-07 14:37:36 +08:00
virusdefender
1af50c0f4c
支持用户的删除
2019-03-11 11:43:15 +08:00
virusdefender
ab37c98347
管理员修改用户信息的时候,也应该不区分用户名和邮箱的大小写
2018-05-06 02:14:46 +08:00
zema1
10ecb79152
fix admin update user real_name problem
2017-12-10 10:05:12 +08:00
zema1
5429e99465
调整UserSerializer
2017-11-30 20:17:56 +08:00
zema1
5cac51007c
完善contest和announcement单元测试
2017-11-28 16:20:29 +08:00
virusdefender
2d038c7bcc
use bulk_create and transaction for user generator
2017-11-24 23:53:47 +08:00
virusdefender
9889ac5b4a
fix directory traversal
2017-11-24 23:31:51 +08:00
virusdefender
7cc33d0701
use bulk_create and transcation for importing user
2017-11-24 23:31:30 +08:00
zema1
4e80ac9492
修复误删用户问题
2017-11-23 22:00:58 +08:00
zema1
a87d73393d
补全account测试
2017-11-23 21:12:37 +08:00
zema1
45953b8f80
submission exists api
2017-11-23 19:11:12 +08:00
zema1
2b4fb4f368
import users api
2017-11-22 20:06:16 +08:00
zema1
e8b06f0487
add generate user api
2017-11-18 08:26:41 +08:00
zema1
334b67488a
添加SPJ编译API
2017-11-16 22:12:17 +08:00
zema1
343eff1c51
admin修改username后update submissions;
...
problem id refresh api
2017-11-08 21:56:39 +08:00
zema1
2d00ed802d
添加initinstall命令
2017-11-07 19:04:41 +08:00
zema1
c16543c830
修复test_case排序问题
2017-11-06 21:45:52 +08:00
zema1
a3ca8b2336
Use signals to save ip, user_agent, last_login in sessions
2017-09-16 17:42:43 +08:00
virusdefender
ef9cdd9f75
remove i18n
2017-04-19 02:03:48 +08:00
virusdefender
817e5aadae
rename some method and add some decorator
2017-02-10 11:46:23 +08:00
virusdefender
802f27a516
add user problem permission
2017-02-10 10:38:32 +08:00
virusdefender
1fc19eba21
refine var name
2017-01-24 23:56:18 +08:00
virusdefender
d9fad97e35
isort
2017-01-23 16:48:04 +08:00
virusdefender
3e42e6648e
reinit
2017-01-23 16:01:56 +08:00
virusdefender
7fcc4d972b
统一APIView的名字
2016-11-19 12:37:27 +08:00
virusdefender
172fd4b1f4
使用Python3和更科学的API写法
2016-11-19 12:32:23 +08:00
virusdefender
39857d1b56
add some tests
2016-10-30 02:17:35 +08:00
virusdefender
61ab910d53
重构
2016-09-25 14:07:45 +08:00