class UserView(GenericViewSet, mixins.RetrieveModelMixin):
""" 用户相关的用户级集 """
queryset = models.User.objects.all()
serializer_class = UserSerializers
# 设置认证用户才能访问
permission_classes = [IsAuthenticated, UserPermissions]
# 修改密码
def update_password(self, request: Request, *args, **kwargs):
# 1.获取参数
code = request.data.get('code')
codeID = request.data.get('codeID')
mobile = request.data.get('mobile')
passwrod = request.data.get('passwrod')
passwrod_confirmation = request.data.get('passwrod_confirmation')
# 2.校验参数
# 2.1 校验参数是否存在
if not all([code, codeID, mobile, passwrod, passwrod_confirmation]):
return Response({"error": "缺少参数!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
# 2.2 手机号是否是当前用户绑定的手机号
user = request.user
if not user.mobile:
return Response({"error": "该用户没有手机号请先去绑定手机号!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
if mobile != user.mobile:
return Response({"error": "手机号码不正确!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
# 2.3 验证码是否存在
code_obj = VerifCode.objects.filter(id=codeID, code=code, mobile=mobile).first()
if not code_obj:
return Response({"error": "该验证码不存在,请重新输入!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
# 2.4 验证吗是否过期
code_time = code_obj.create_time.timestamp()
now_time = time.time()
if code_time + 180 < now_time:
return Response({"error": "该验证码已过期,请重新输入!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
# 2.6 两次输入密码是否一致
if passwrod != passwrod_confirmation:
return Response({"error": "两次密码不一致!"}, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
# 3.保存参数
# 必须要使用set_password方法,这样才可以进行加密处理
user.set_password(passwrod)
user.save()
return Response({"message": "修改密码成功!"}, status=status.HTTP_200_OK)
Django+DRF框架修改密码操作
于 2023-09-23 13:55:19 首次发布