Files
DroneWars/api/views.py
2026-02-10 20:24:02 +01:00

68 lines
2.1 KiB
Python

from rest_framework import permissions, status
from rest_framework.response import Response
from rest_framework.views import APIView
from .serializers import LoginSerializer, LogoutSerializer, RegistrationSerializer
class RegisterView(APIView):
permission_classes = [permissions.AllowAny]
throttle_scope = "auth"
def post(self, request):
serializer = RegistrationSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{"errors": serializer.errors},
status=status.HTTP_400_BAD_REQUEST,
)
user = serializer.save()
login_serializer = LoginSerializer(
data={
"email": user.email,
"password": request.data.get("password"),
},
context={"request": request},
)
login_serializer.is_valid(raise_exception=True)
tokens = login_serializer.save()
return Response(
{
"user": {
"id": user.id,
"email": user.email,
},
"tokens": tokens,
},
status=status.HTTP_201_CREATED,
)
class LoginView(APIView):
permission_classes = [permissions.AllowAny]
throttle_scope = "auth"
def post(self, request):
serializer = LoginSerializer(data=request.data, context={"request": request})
if not serializer.is_valid():
return Response(
{"errors": serializer.errors},
status=status.HTTP_400_BAD_REQUEST,
)
tokens = serializer.save()
return Response({"tokens": tokens}, status=status.HTTP_200_OK)
class LogoutView(APIView):
permission_classes = [permissions.IsAuthenticated]
def post(self, request):
serializer = LogoutSerializer(data=request.data)
if not serializer.is_valid():
return Response(
{"errors": serializer.errors},
status=status.HTTP_400_BAD_REQUEST,
)
serializer.save()
return Response({"detail": "Logged out."}, status=status.HTTP_200_OK)