reset password

This commit is contained in:
2025-08-30 14:29:16 +08:00
parent a5fc7cc369
commit 911c777348
2 changed files with 30 additions and 1 deletions

View File

@@ -1,8 +1,9 @@
from django.urls import path from django.urls import path
from ..views.admin import UserAdminAPI, GenerateUserAPI from ..views.admin import UserAdminAPI, GenerateUserAPI, ResetUserPasswordAPI
urlpatterns = [ urlpatterns = [
path("user", UserAdminAPI.as_view()), path("user", UserAdminAPI.as_view()),
path("generate_user", GenerateUserAPI.as_view()), path("generate_user", GenerateUserAPI.as_view()),
path("reset_password", ResetUserPasswordAPI.as_view()),
] ]

View File

@@ -6,6 +6,7 @@ from django.db import transaction, IntegrityError
from django.db.models import Q from django.db.models import Q
from django.http import HttpResponse from django.http import HttpResponse
from django.contrib.auth.hashers import make_password from django.contrib.auth.hashers import make_password
from django.utils.crypto import get_random_string
from submission.models import Submission from submission.models import Submission
from utils.api import APIView, validate_serializer from utils.api import APIView, validate_serializer
@@ -239,3 +240,30 @@ class GenerateUserAPI(APIView):
# duplicate key value violates unique constraint "user_username_key" # duplicate key value violates unique constraint "user_username_key"
# DETAIL: Key (username)=(root11) already exists. # DETAIL: Key (username)=(root11) already exists.
return self.error(str(e).split("\n")[1]) return self.error(str(e).split("\n")[1])
class ResetUserPasswordAPI(APIView):
@super_admin_required
def post(self, request):
"""
重置用户密码为随机6位数字(不包括0)
"""
data = request.data
user_id = data["id"]
try:
user = User.objects.get(id=user_id)
except User.DoesNotExist:
return self.error("User does not exist")
# 生成6位随机数字密码(不包括0)
new_password = get_random_string(6, allowed_chars="123456789")
# 设置新密码
user.set_password(new_password)
user.save()
return self.success({
"message": "Password reset successfully",
"new_password": new_password
})