From 654e4ce4a4a6a8a51f8ef0508bbdc596df2529c4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sun, 15 Jun 2025 19:11:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=9B=E5=BB=BA=E7=94=A8?= =?UTF-8?q?=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- account/api.py | 26 +++++++++++++++++++++----- data/hitokoto | 1 + 2 files changed, 22 insertions(+), 5 deletions(-) create mode 160000 data/hitokoto diff --git a/account/api.py b/account/api.py index c37e00a..5f34e74 100644 --- a/account/api.py +++ b/account/api.py @@ -13,10 +13,19 @@ from .schemas import ( ) from .models import RoleChoices, User from .decorators import super_required +from django.db import transaction +import secrets +import string router = Router() +def generate_password(length=6): + """生成更安全的随机密码""" + alphabet = string.digits[2:] # 只使用2-9的数字 + return "".join(secrets.choice(alphabet) for _ in range(length)) + + @router.post("/register") def user_register(request, payload: UserRegistrationSchema): if User.objects.filter(username=payload.username).exists(): @@ -68,26 +77,33 @@ def list(request, username: str, role: str = None): @router.post("/batch") @super_required +@transaction.atomic def batch_create(request, payload: BatchUsersIn): - # 批量创建账号 - # TODO 这里需要改成 bulk_create prefix = "web" usernames = [] + users_to_create = [] + # 生成用户名列表 for name in payload.names: username = prefix + payload.classname + name usernames.append(username) + + # 检查是否存在重复用户名 existing_users = User.objects.filter(username__in=usernames) if existing_users.exists(): raise HttpError(400, "有些用户已经存在,创建失败") + # 批量创建用户 for username in usernames: - digits = [str(random.randint(2, 9)) for _ in range(6)] - password = "".join(digits) + password = generate_password() user = User(username=username) user.set_password(password) - user.save() + users_to_create.append(user) + # 使用 bulk_create 批量保存 + User.objects.bulk_create(users_to_create, ignore_conflicts=True) + + # 返回创建的用户信息 return {"message": "批量创建成功"} diff --git a/data/hitokoto b/data/hitokoto new file mode 160000 index 0000000..b503a98 --- /dev/null +++ b/data/hitokoto @@ -0,0 +1 @@ +Subproject commit b503a98f236a3737df3615316c08052e6f99ca07