无法使用提供的凭据django DRF

时间:2020-05-11 20:40:28

标签: django django-rest-framework

我第一次尝试django REST api,我正在做一些验证,现在当我运行以下命令时遇到此错误:[curl -X POST -d“ username =&password =” http://127.0.0.1:8000/api/auth/login/] 错误:{“ non_field_errors”:[“无法使用提供的凭据登录。”]}

views.py:

class CreateUserAPIView(CreateAPIView):
    serializer_class = CreateUserSerializer
    permission_classes = [AllowAny]

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        self.perform_create(serializer)
        headers = self.get_success_headers(serializer.data)
        # We create a token than will be used for future auth
        token = Token.objects.create(user=serializer.instance)
        token_data = {"token": token.key}
        return Response(
            {**serializer.data, **token_data},
            status=status.HTTP_201_CREATED,
            headers=headers
        )

serializers.py

class CreateUserSerializer(serializers.ModelSerializer):
    username = serializers.CharField()
    password = serializers.CharField(write_only=True,
                                     style={'input_type': 'password'})

    class Meta:
        model = get_user_model()
        fields = ('username', 'password', 'first_name', 'last_name')
        write_only_fields = ('password')
        read_only_fields = ('is_staff', 'is_superuser', 'is_active',)

    def create(self, validated_data):
        user = super(CreateUserSerializer, self).create(validated_data)
        user.set_password(validated_data['password'])
        user.save()
        return user

urls.py


urlpatterns = [
    path('auth/login/',
        obtain_auth_token,
        name='auth_user_login'),
    path('auth/register/',
        CreateUserAPIView.as_view(),
        name='auth_user_create'),
    path('auth/logout/',
        LogoutUserAPIView.as_view(),
        name='auth_user_logout')
]

1 个答案:

答案 0 :(得分:1)

您所指向的教程要求您create a superuser中的section 1.2,因此请自己创建一个,然后在登录时使用这些信息。

在您的终端中,您将输入:python manage.py createsuperuser

然后将提示您如下:

Username (leave blank to use 'ubuntu'): <YOUR_USERNAME>
Email address: <email> // you can leave it as blank
Password: <YOUR_PASSWORD>
Password (again): <YOUR_PASSWORD>

然后再次调用,将<>之间的那些值替换为您的输入值:

curl -X POST -d "username=<YOUR_USERNAME>&password=<YOUR_PASSWORD>" http://127.0.0.1:8000/api/auth/login/