68 lines
2.1 KiB
Python
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)
|