Files
job-tracker/api/accounts/views.py
T

49 lines
1.5 KiB
Python

from typing import Any
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes, throttle_classes
from rest_framework.permissions import AllowAny
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.throttling import AnonRateThrottle
from accounts.serializers import LoginSerializer, RegisterSerializer, UserSerializer
class AuthRateThrottle(AnonRateThrottle):
scope = "auth"
@api_view(["POST"])
@permission_classes([AllowAny])
@throttle_classes([AuthRateThrottle])
def register_view(request: Request) -> Response:
"""Register a new user account."""
serializer = RegisterSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response(
UserSerializer(user).data,
status=status.HTTP_201_CREATED,
)
@api_view(["POST"])
@permission_classes([AllowAny])
@throttle_classes([AuthRateThrottle])
def login_view(request: Request) -> Response:
"""Authenticate a user and return JWT tokens."""
serializer = LoginSerializer(
data=request.data,
context={"request": request},
)
serializer.is_valid(raise_exception=True)
validated_data: dict[str, Any] = serializer.validated_data
return Response(
{
"user": UserSerializer(validated_data["user"]).data,
"access": validated_data["access"],
"refresh": validated_data["refresh"],
},
status=status.HTTP_200_OK,
)