From 3ee6ae835a257a72154655f6982ab238db29577f Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 6 Mar 2025 14:51:43 +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 | 34 ++++++++++++++++++++++++++++++---- account/schemas.py | 6 ++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/account/api.py b/account/api.py index aad87f3..ff3f0e4 100644 --- a/account/api.py +++ b/account/api.py @@ -1,10 +1,16 @@ +import random from typing import List from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from ninja import Router -from ninja.pagination import paginate, PageNumberPagination +from ninja.pagination import paginate from ninja.errors import HttpError -from .schemas import UserListSchema, UserRegistrationSchema, UserLoginSchema +from .schemas import ( + BatchUsersIn, + UserListSchema, + UserRegistrationSchema, + UserLoginSchema, +) from .models import RoleChoices, User from .decorators import super_required @@ -61,9 +67,29 @@ def list(request, username: str, role: str = None): @router.post("/batch") @super_required -def batch_create(request): +def batch_create(request, payload: BatchUsersIn): # 批量创建账号 - pass + prefix = "web" + user_list = [] + usernames = [] + + for name in payload.names: + username = prefix + payload.classname + name + usernames.append(username) + digits = [str(random.randint(2, 9)) for _ in range(6)] + password = "".join(digits) + user_list.append( + User( + username=username, + password=password, + raw_password=password, + ) + ) + + existing_users = User.objects.filter(username__in=usernames) + if existing_users.exists(): + raise HttpError(400, "有些用户已经存在,创建失败") + User.objects.bulk_create(user_list) @router.put("/active/{id}") diff --git a/account/schemas.py b/account/schemas.py index fa1622a..695876b 100644 --- a/account/schemas.py +++ b/account/schemas.py @@ -1,3 +1,4 @@ +from typing import List from ninja import Schema, ModelSchema from pydantic import EmailStr, Field @@ -40,3 +41,8 @@ class UserRegistrationSchema(Schema): class UserLoginSchema(Schema): username: str password: str + + +class BatchUsersIn(Schema): + names: List[str] + classname: str