Ошибка CreateAPIView: необходимо реализовать функцию » создать ()»

#python-3.x #django #django-rest-framework

Вопрос:

Мой код: serializers.py:

 class AuthenticationSerializer(serializers.Serializer):
    email = serializers.CharField(max_length=255)
    password = serializers.CharField(max_length=128, write_only=True)
    def validate(self, data):
        email = data.get('email')
        password = data.get('password')
        user = User.objects.get(email=email, password=password)
        if user is None:
            raise serializers.ValidationError(
                'A user with this email and password was not found.'  ' '   email   ' '   password
            )
        return  {
            'email': user.email,
            'username': user.username,
        }
 

views.py:

 class Authentication(CreateAPIView):
    serializer_class = AuthenticationSerializer
    def authentication(request):
        user = request.data.get('user', {})
        serializer = self.serializer_class(data=user)
        serializer.is_valid(raise_exception=True)
        return user, Response(serializer.data, status=status.HTTP_200_OK)
 

Мне нужно создать аутентификацию и после дать пользователю JWTToken, но я не могу выполнить аутентификацию. Я работаю с этой библиотекой 2 дня. Может быть, это потому, что я использую CreateAPIView ? Но чем я могу заменить CreateAPIView?

Комментарии:

1. Ваш сериализатор не является ModelSerializer , следовательно, для него нет метода serialzer.save() , поэтому вы должны определить его, если хотите создавать элементы.

2. Мне нужно пройти аутентификацию перед созданием токена JWT, потому что я не могу создать токен JWT, если пользователь не прошел аутентификацию.

3. Я думаю, вам нужно переименовать authenticate() в create() . Однако я предлагаю использовать django-rest-framework-simplejwt , а не реализовывать аутентификацию самостоятельно.