FinMK / backend /users /views.py
Kumar
Refactor: Exclude PDF and CSV files from Git to fix HF push error
24e6f5b
from rest_framework import generics, permissions, status
from rest_framework.response import Response
from rest_framework_simplejwt.tokens import RefreshToken
from .serializers import UserSerializer, RegisterSerializer
# Removed get_user_model as we are in 100% MongoDB mode.
from django.contrib.auth import authenticate
class LoginView(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer # Reusing for username/password
def post(self, request, *args, **kwargs):
username = request.data.get('username')
password = request.data.get('password')
# Use global authenticate logic (tries all backends in settings.py)
user = authenticate(request, username=username, password=password)
if user:
refresh = RefreshToken.for_user(user)
return Response({
'user': UserSerializer(user).data,
'refresh': str(refresh),
'access': str(refresh.access_token),
})
return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
class RegisterView(generics.CreateAPIView):
permission_classes = (permissions.AllowAny,)
serializer_class = RegisterSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user_data = serializer.save()
# Wrapper to make simplejwt happy (it expects an object with id/pk)
class UserWrapper:
def __init__(self, data):
self.id = data.get('id')
self.pk = data.get('id')
self.username = data.get('username')
self.email = data.get('email')
def __str__(self):
return self.username
user_obj = UserWrapper(user_data)
refresh = RefreshToken.for_user(user_obj)
return Response({
'user': UserSerializer(user_data, context=self.get_serializer_context()).data,
'refresh': str(refresh),
'access': str(refresh.access_token),
}, status=status.HTTP_201_CREATED)
class ProfileView(generics.RetrieveUpdateAPIView):
serializer_class = UserSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_object(self):
return self.request.user