我正在使用 ModelViewSet 使用 Django 用户模型。当我请求更新当前登录用户的密码时。虽然我收到 200 OK 响应,但我的密码永远不会更改为我更改的新密码。
我还尝试从我的管理员用户发出请求,当我使用密码发出 PUT 请求时,它被更改为其他内容,并且我从 django 管理面板中注销。
这是我的
视图.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [IsAuthenticated, IsOwnerOfObject]
authentication_classes = (TokenAuthentication,)
序列化程序.py
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'username', 'password']
extra_kwargs = {
'password' : {
'write_only':True,
'required': True
}
}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
Token.objects.create(user=user) # create token for the user
return user
网址.py
router = DefaultRouter()
router.register('articles', ArticleViewSet, basename='articles')
router.register('users', UserViewSet, basename = 'users')
urlpatterns = [
path('api/', include(router.urls)),
]
权限.py
class IsOwnerOfObject(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj == request.user
这是我提出请求的方式,在 Headers 字段中使用 Authorization token
回复 :