gpt4 book ai didi

python - Django 休息框架 : Unclear error message

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:59 28 4
gpt4 key购买 nike

我的views.py:

class user_password(generics.UpdateAPIView):
authentication_classes = ([JSONWebTokenAuthentication])
serializer_class = user_password_serializer

def get_queryset(self):
return User.objects.get(id=self.request.user.id)

但是我在运行它时得到了这个:

AssertionError: Expected view user_password to be called with a URL keyword argument named "pk". Fix your URL conf, or set the .lookup_field attribute on the view correctly.

我知道序列化程序没问题,因为当我对同一事物使用不同类型的 View 时。它有效:

class user_password(APIView):

authentication_classes = ([JSONWebTokenAuthentication])

def put(self, request, format=None):

serializer = user_password_serializer(data=request.data)
if serializer.is_valid():
if request.user.check_password(serializer.validated_data[
'old_password']):
request.user.set_password(serializer.validated_data[
'new_password'])
request.user.save()

return Response({'success': True,
'result': serializer.validated_data},
status=status.HTTP_200_OK)
else:
return Response({'success': False,
'result': "credential mismatch"},
status=status.HTTP_401_UNAUTHORIZED)


return Response({'success': False,
'result': serializer.errors},
status=status.HTTP_400_BAD_REQUEST)

我不想改变端点的构建方式。我确实有一个经过 JWT 身份验证的调用,我希望/user/password 能够简单地将“旧密码”和“新密码”放入同一个用户中。

我在 generics.UpdateAPIView 类中做错了什么? .lookup_field 它在说什么?

最佳答案

.lookup_feildUpdateAPIView 期望在您的 url 模式中的字段(捕获组)(默认为 pk),例如:

r'^user/(?P<pk>\d+)/password/?$'

但是,您应该能够覆盖 get_object而不是 get_queryset,它应该可以在不对 url 进行任何更改的情况下工作。

class user_password(generics.UpdateAPIView):
authentication_classes = ([JSONWebTokenAuthentication])
serializer_class = user_password_serializer

def get_object(self):
return User.objects.get(id=self.request.user.id)

此外,只需返回 self.request.user 就可以正常工作(我不知道 JWT 身份验证在您的项目中是如何实现的,但大多数时候 Django 会在 request.user 无论如何)。

关于python - Django 休息框架 : Unclear error message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400362/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com