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>
This commit is contained in:
@@ -22,17 +22,12 @@ from ..serializers import (
|
||||
)
|
||||
|
||||
|
||||
# ks251XXX 或者 ks2510XX 返回 251 或者 2510
|
||||
# 其他返回 None
|
||||
# ks251XXX 或者 ks2510XX 返回 251 或者 2510,其他返回 None。
|
||||
# 班级号限定 3~4 位,与前端 ButtonWithSearch 的 /^ks\d{3,4}/ 保持一致;
|
||||
# 原来的 \d+ 会贪婪吃掉后面的数字(ks251001 会返回 251001 而不是 251)。
|
||||
def get_class_name(username):
|
||||
if username.startswith("ks"):
|
||||
result = re.search(r"ks\d+", username)
|
||||
if result:
|
||||
return result.group(0)[2:]
|
||||
else:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
result = re.match(r"ks(\d{3,4})", username)
|
||||
return result.group(1) if result else None
|
||||
|
||||
|
||||
class UserAdminAPI(APIView):
|
||||
|
||||
Reference in New Issue
Block a user