| 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 |
| |
|
|
| from django.contrib.auth import authenticate |
|
|
| class LoginView(generics.GenericAPIView): |
| permission_classes = (permissions.AllowAny,) |
| serializer_class = RegisterSerializer |
|
|
| def post(self, request, *args, **kwargs): |
| username = request.data.get('username') |
| password = request.data.get('password') |
| |
| |
| 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() |
|
|
| |
| 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 |
|
|