我views.py:Django的REST框架:不确定错误消息
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.
我知道串行器是好的,因为当我对同一事物使用不同类型的视图。它的工作原理:
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认证的呼叫,并且我希望/用户/密码能够简单地将“旧密码”和“新密码”放入同一个用户。
我在做什么错在我的generics.UpdateAPIView
类?那是什么.lookup_field
它在说什么?
你可以分享视图的'urls.py'吗? –
'url(r'^ user/password/$',views.user_password.as_view())',我真的不想在我的URL中有一个'/ {user_id} /'。我的应用程序基于JWT,用户已通过JWT令牌识别。我只想让端点更改用户密码,即匹配JWT令牌的相同用户。 – JasonGenX