from django.contrib.auth import get_user_model from rest_framework import generics, permissions, status from rest_framework.response import Response from rest_framework.views import APIView from .serializers import ChangePasswordSerializer, RegisterSerializer, UserSerializer UserModel = get_user_model() class RegisterView(generics.CreateAPIView): """Create a new user account.""" queryset = UserModel.objects.all() serializer_class = RegisterSerializer permission_classes = [permissions.AllowAny] class UserDetailView(generics.RetrieveUpdateAPIView): """Get or update the authenticated user's profile.""" serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] def get_object(self): return self.request.user class ChangePasswordView(APIView): """Change the authenticated user's password.""" permission_classes = [permissions.IsAuthenticated] def post(self, request): serializer = ChangePasswordSerializer(data=request.data, context={"request": request}) serializer.is_valid(raise_exception=True) request.user.set_password(serializer.validated_data["new_password"]) request.user.save() return Response({"detail": "Password changed successfully."}, status=status.HTTP_200_OK)