update. 初步完成用户管理接口

This commit is contained in:
ngfchl
2026-04-09 13:33:40 +08:00
parent 2ed7904ada
commit 8161a27cf5
3 changed files with 143 additions and 1 deletions
+47 -1
View File
@@ -2,7 +2,53 @@
from datetime import datetime
from typing import List, Optional
from ninja import Schema
from ninja import Schema, ModelSchema
from users.models import User
# ========== 用户 Schema ==========
class UserOut(Schema):
id: int
username: str
cname: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
avatar: Optional[str] = None
# dept: Optional[int] = None
# roles: List[int] = []
is_active: bool
is_staff: bool
is_superuser: bool
last_login: Optional[datetime] = None
date_joined: datetime
class UserCreate(Schema):
username: str
password: str
cname: Optional[str] = None
phone: Optional[str] = None
email: Optional[str] = None
dept: Optional[int] = None
roles: List[int] = []
is_active: bool = True
class UserUpdate(Schema):
username: Optional[str]
password: Optional[str]
cname: Optional[str]
phone: Optional[str]
email: Optional[str]
dept: Optional[int]
roles: Optional[List[int]]
is_active: Optional[bool]
# ========== 菜单 Schema ==========
+94
View File
@@ -0,0 +1,94 @@
from typing import List
from django.db.models import Prefetch
from django.shortcuts import get_object_or_404
from ninja import Router
from ninja.pagination import paginate, PageNumberPagination
from users.models import User, Role
from users.schema import UserUpdate, UserOut, UserCreate
router = Router(tags=['users'])
@router.get("/", response=List[UserOut], summary="获取用户列表")
@paginate(PageNumberPagination, page_size=20)
def list_users(request):
# if not has_permission(request.auth.id, "user:list"):
# raise HttpError(403, "权限不足")
return User.objects.all()
@router.get("/", response=dict)
def list_users(request, page: int = 1, page_size: int = 10, username: str = None):
qs = User.objects.all().order_by("-id")
if username:
qs = qs.filter(username__icontains=username)
total = qs.count()
start = (page - 1) * page_size
end = start + page_size
items = list(qs[start:end].values(
"id", "username", "cname", "phone", "email",
"avatar", "dept",
"is_active", "is_staff", "is_superuser",
"last_login", "date_joined"
))
# roles 需要手动补
for i, obj in enumerate(qs[start:end]):
items[i]["roles"] = list(obj.roles.values_list("id", flat=True))
return {"items": items, "count": total}
@router.get("/{id}", response=UserOut)
def get_user(request, id: int):
obj = get_object_or_404(User, id=id)
data = obj.__dict__
data["roles"] = list(obj.roles.values_list("id", flat=True))
return data
@router.post("/", response=UserOut)
def create_user(request, data: UserCreate):
user = User.objects.create_user(
username=data.username,
password=data.password
)
for k, v in data.dict(exclude={"password"}).items():
setattr(user, k, v)
user.save()
if data.roles:
user.roles.set(data.roles)
return user
@router.put("/{id}")
def update_user(request, id: int, data: UserUpdate):
user = get_object_or_404(User, id=id)
if data.password:
user.set_password(data.password)
for k, v in data.dict(exclude_unset=True, exclude={"password", "roles"}).items():
setattr(user, k, v)
user.save()
if data.roles is not None:
user.roles.set(data.roles)
return {"success": True}
@router.delete("/{id}")
def delete_user(request, id: int):
User.objects.filter(id=id).delete()
return {"success": True}
+2
View File
@@ -1,4 +1,5 @@
from ninja import Router
from .users import router as users_router
from .menus import router as menu_router
from .roles import router as role_router
from .permissions import router as perm_router
@@ -7,6 +8,7 @@ from .departments import router as dept_router
# Create your views here.
router = Router(tags=['users'])
router.add_router("/users", users_router) # 用户基础接口
router.add_router("/perms", perm_router) # 用户基础接口
router.add_router("/menus", menu_router) # /menus/
router.add_router("/roles", role_router) # /roles/