Python Django不';t为AnonymousUser-Django rest api提供数据库表示
我尝试不用传统的方式更改密码。提供旧密码和新密码,更新旧密码。我使用了UpdateAview。但是我得到了以下错误Python Django不';t为AnonymousUser-Django rest api提供数据库表示,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,我尝试不用传统的方式更改密码。提供旧密码和新密码,更新旧密码。我使用了UpdateAview。但是我得到了以下错误 Django doesn't provide a DB representation for AnonymousUser 我尝试使用邮递员在标题中传递授权令牌。但同样的错误 view.py class ChangePassword(generics.UpdateAPIView): serializer_class = serializers.ChangePasswordS
Django doesn't provide a DB representation for AnonymousUser
我尝试使用邮递员在标题中传递授权令牌。但同样的错误
view.py
class ChangePassword(generics.UpdateAPIView):
serializer_class = serializers.ChangePasswordSerializer
model = models.Customer
def get_object(self, queryset=None):
obj = self.request.user
return obj
def update(self, request, *args, **kwargs):
self.object = self.get_object()
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
if not self.object.check_password(serializer.data.get("old_password")):
return Response({"old_password": ["Wrong password."]}, status=HTTP_400_BAD_REQUEST)
self.object.set_password(serializer.data.get("new_password"))
self.object.save()
return Response("Success.", status=HTTP_200_OK)
return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
序列化程序.py
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(required=True)
new_password = serializers.CharField(required=True)
url.py
path('update_password', views.ChangePassword.as_view()),
编辑:
我在settings.py中添加了TokenAuthentication
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
)
}
在views.py中,我添加了
身份验证\u类=(令牌身份验证,)
现在我得到的名称“TokenAuthentication”未定义
我在views.py中导入了令牌身份验证
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
但是,Django不为匿名用户提供DB表示。将属性
authentication\u classes=(TokenAuthentication,)
添加到ChangePassword视图。{“详细信息”:“未提供身份验证凭据”。}我将旧密码、新密码作为表单数据传递。我使用Braerer token作为“token 3c06246990ea0431229872ece5d5935b107518a2432”我用我从你的建议中尝试的内容更新了我的帖子确保你遵循了以下步骤1。在已安装的应用程序(在settings.py文件中)2中添加应用程序rest\u framework.authtoken
。确保已在settings.py文件REST_FRAMEWORK={'DEFAULT_AUTHENTICATION_CLASSES':['REST_FRAMEWORK.AUTHENTICATION.TokenAuthentication',],}
I get name'TokenAuthentication'未定义。在views.py中是否有要导入的内容