如何使用序列化程序注销



我是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

视图.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"})

这取决于您对用户进行身份验证的方式。从您的代码中,我看不出您是如何实际验证用户的(您似乎只是检查用户是否存在,您不会在任何地方给他们授权令牌(。基本上,我不确定在您当前的体系结构中如何注销,因为从来没有用户登录来注销他们。

您可能需要考虑令牌身份验证。

最新更新