Django Rest-创建用户密码哈希

Django Rest-创建用户密码哈希,django,django-rest-framework,Django,Django Rest Framework,我正在尝试散列密码,一旦创建了用户,我就使用Django Rest。然而,我在尝试创建它时遇到了一个错误 { "non_field_errors": [ "Invalid data. Expected a dictionary, but got str." ] } My UserSerializer My ModelViewset 提前感谢…啊,啊,啊,我找到了我的答案 添加您的UserSerializer类以及您在POS

我正在尝试散列密码,一旦创建了用户,我就使用
Django Rest
。然而,我在尝试创建它时遇到了一个错误

{
    "non_field_errors": [
        "Invalid data. Expected a dictionary, but got str."
    ]
}
My UserSerializer

My ModelViewset

提前感谢…

啊,啊,啊,我找到了我的答案


添加您的
UserSerializer
类以及您在POST请求中使用的有效负载。另外,为什么需要在此处散列密码?我看不到任何用户创建操作在您给定的code@ArakkalAbu我更新了我的问题,请检查一下。@ArakkalAbu我的密码不是散列的,当创建新用户时。因此,我想
重写
my
UserViewSet
重写序列化程序类的
create()
方法,如果使用更多的DRF方法

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'first_name', 'last_name', 'email', 'active',
                  'admin', 'date_joined', 'password', 'partner']
class UserViewset(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (filters.DjangoFilterBackend,)

    def create(self, request, *args, **kwargs):
        user = User.objects.all()
        serializer = UserSerializer(
            user, make_password(request.data['password']))
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(serializer.data)
        # return HttpResponse(user)

class UserViewset(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    filter_backends = (filters.DjangoFilterBackend,)

    def perform_create(self, serializer):
        # Hash password but passwords are not required
        if ('password' in self.request.data):
            password = make_password(self.request.data['password'])
            serializer.save(password=password)
        else:
            serializer.save()

    def perform_update(self, serializer):
        # Hash password but passwords are not required
        if ('password' in self.request.data):
            password = make_password(self.request.data['password'])
            serializer.save(password=password)
        else:
            serializer.save()