From ece9b4059e4fa828c7eca7f41c37234df8284999 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 5 Mar 2025 20:50:21 +0800 Subject: [PATCH] add paginate --- account/api.py | 23 +++++++++++++++++++++-- account/schemas.py | 2 ++ api/settings.py | 4 ++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/account/api.py b/account/api.py index bdfbeb5..aad87f3 100644 --- a/account/api.py +++ b/account/api.py @@ -2,6 +2,7 @@ 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.errors import HttpError from .schemas import UserListSchema, UserRegistrationSchema, UserLoginSchema from .models import RoleChoices, User @@ -49,9 +50,12 @@ def my_profile(request): @router.get("/list", response=List[UserListSchema]) @super_required -def list(request, username: str): - # 之后加上分页 +@paginate +def list(request, username: str, role: str = None): + # 用户列表 users = User.objects.filter(username__icontains=username) + if role: + users = users.filter(role=role) return [UserListSchema.from_orm(user) for user in users] @@ -60,3 +64,18 @@ def list(request, username: str): def batch_create(request): # 批量创建账号 pass + + +@router.put("/active/{id}") +@super_required +def toggle_user_is_active(request, id: int): + # 封号和解封 + try: + user = User.objects.get(id=id) + user.is_active = not user.is_active + user.save() + return { + "message": f"{user.username} {'解封' if user.is_active else '封号'}成功" + } + except User.DoesNotExist: + raise HttpError(404, "查无此人") diff --git a/account/schemas.py b/account/schemas.py index c334f36..fa1622a 100644 --- a/account/schemas.py +++ b/account/schemas.py @@ -9,6 +9,7 @@ class UserListSchema(ModelSchema): def from_orm(cls, obj): raw_password = obj.raw_password if obj.role == RoleChoices.NORMAL else "" return cls( + id=obj.id, username=obj.username, raw_password=raw_password, role=obj.role, @@ -20,6 +21,7 @@ class UserListSchema(ModelSchema): class Meta: model = User fields = [ + "id", "username", "raw_password", "role", diff --git a/api/settings.py b/api/settings.py index bdf1204..6ea74e1 100644 --- a/api/settings.py +++ b/api/settings.py @@ -163,3 +163,7 @@ else: CORS_ALLOWED_ORIGINS = ["https://web.xuyue.cc"] CORS_ALLOW_CREDENTIALS = True + +NINJA_PAGINATION_CLASS = "ninja.pagination.PageNumberPagination" + +NINJA_PAGINATION_PER_PAGE = 20