【发布时间】:2017-11-08 01:57:34
【问题描述】:
我的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:预期视图 user_password 将使用名为“pk”的 URL 关键字参数调用。修正你的 URL 配置,或者正确设置视图的
.lookup_field属性。
我知道序列化器没问题,因为当我对同一件事使用不同类型的 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 在说什么?
【问题讨论】:
-
你能分享一下
urls.py的观点吗? -
url(r'^user/password/$', views.user_password.as_view()),我真的不想在我的网址中有/{user_id}/。我的应用是基于 JWT 的,用户已经通过 JWT 令牌被识别。我只想要一个端点来更改用户密码,与 JWT 令牌匹配的同一用户。
标签: python django django-views django-rest-framework