python - 无法使用 ModelViewSet 更改 Django 用户模型的用户密码
问题描述
我正在使用 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
回复 :
解决方案
正如@BrianDestura 所说,您需要调用set_password
才能正确更新它。
class UserSerializer(serializers.ModelSerializer):
# --> Add this method
def update(self, instance, validated_data):
# We Can change the username?
instance.username = validated_data['username']
instance.set_password(validated_data['password'])
instance.save()
return instance
推荐阅读
- python - Pycharm python-snowflake 连接器包适用于所有其他项目,除了在科学模式项目中未找到
- python - 如何使用 exec() 在函数内部创建一个类?
- javascript - 如何访问 html 或 css 中的 BrowserView 对象?
- javascript - 尝试从我的 mongoDB 访问数据并推送到 HTML
我试图简单地获取存储在 mongoDB 中的数据并将其推送到 HTML 中的表中。我需要访问刽子手数据库 >玩家集合,其中仅包含名称和分数集合。请有人指出我哪里出错了?
但是我的 Chrome 控制台错误是:
Cannot read property
- javascript - 在函数上使用我的拆分日期数据有问题吗?
- angular - 如何在angular2或更高版本的下拉菜单下有一个带有搜索过滤器的搜索框
- sql-server - MS SQL 空间索引和执行时间
- javascript - 有没有办法在局部视图中获取 ajax 调用的控制器路径?
- lapack - 查找 LAPACK/BLAS 错误代码列表
- tensorflow - 对象检测在笔记本电脑上运行非常缓慢