我第一次尝试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')
]
答案 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/