Как я могу использовать Serializer для выхода из системы?
Я новичок в Django и готовлюсь к сессии DRF.
Мне нужно написать код в Serializers.py и views.py для функции Logout, но я не знаю, что делать и с чего начать. Не могли бы вы помочь? Вот код для регистрации и входа
Serialzers.py
from rest_framework import serializers
from .models import *
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'email', 'password']
def create(self, validated_data):
user = User.objects.create(
email=validated_data['email'], username=validated_data['username'],)
user.set_password(validated_data['password'])
user.save()
return user
class UserLoginSerializer(serializers.Serializer):
email = serializers.CharField(max_length=64)
password = serializers.CharField(max_length=128, write_only=True)
def validate(self, data):
email = data.get("email", None)
password = data.get("password", None)
if User.objects.filter(email=email).exists():
user = User.objects.get(email=email)
if not user.check_password(password):
raise serializers.ValidationError()
else:
return user
else:
raise serializers.ValidationError()
class UserLogoutSerializer(serializers.Serializer):
# I have to do this part
views.py
from django.shortcuts import get_object_or_404, render
from .serializers import *
from .models import *
from rest_framework import views
from rest_framework.response import Response
class SignUpView(views.APIView):
def post(self, request, format=None):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'message': 'Success', 'data': serializer.data})
return Response({'message': 'Fail', 'error': serializer.errors})
class LoginView(views.APIView):
def post(self, request):
serializer = UserLoginSerializer(data=request.data)
if serializer.is_valid():
return Response({'message': "Success", 'data': serializer.data})
return Response({'message': "Fail", 'data': serializer.errors})
class LogoutView(views.APIView):
Не обязательно использовать сериализатор. Выход из системы может быть таким же простым, как однократный вызов конечной точки (выход из системы просто отключает любой активный токен авторизации). Попробуйте следующее:
from django.contrib.auth import logout
class LogoutView(views.APIView):
def post(self, request):
logout(request)
return Response({'message': "Logout successful"})
Это зависит от того, как вы аутентифицируете пользователя. Из вашего кода я не вижу, как вы на самом деле аутентифицируете пользователя (похоже, вы только проверяете, существует ли пользователь, вы нигде не даете ему токен авторизации). В принципе, я не уверен, как можно выйти из системы в вашей текущей архитектуре, так как нет пользователя, вошедшего в систему, чтобы выйти из нее.
Возможно, вы захотите рассмотреть возможность аутентификации по токену ..