我创建了一个 编辑 函数来编辑用户的用户名。

def edit(request):
    if request.user.is_authenticated:
        data = request.POST
        s = UserSerializer(data=data)
        u = s.is_valid()
        if u:
            s.update(request.user.username,request.POST['username'])
            return JsonResponse(
                {
                    'message' : 'profile edited!'
                },status=201
            )
    else:
        return JsonResponse(
            {
                'message' : 'you are not login!'
            },status=401
        )


我不知道应该在哪里使用 PUT 以及如何使用 update()

这是我的序列化程序类:
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = (
            'username','email','password'
        )

    def validate_password(self,password):
        password = make_password(password)
        return password

    def update(self,isinstance, validated_data):
        instance.username = validated_data.get('username', instance.username)
        instance.email = validated_data.get('email', instance.email)
        return instance

最佳答案

在 Django rest 框架 APIView class 中,你应该使用 from put 函数而不是编辑:

def put(request):
    ...

要使用序列化程序,请在您的 View 函数中使用 serializers.save() function :
def put(request):
    ....
    s.save()

save函数,基于view函数会调用update(对于put函数),create(对于post函数),destroy(对于delete函数)。
当你想从序列化器类实例化时,你必须将模型对象作为 instance 和数据作为 data 属性传递。总之,您的 View 函数将是这样的:
  class YourView(APIView)
      def put(request):
         if request.user.is_authenticated:
            s = UserSerializer(instance=request.user, data=request.POST)
            if s.is_valid():
                s.save()
                return Response(
                    {
                        'message': 'profile edited!'
                    }, status=201
                )
        else:
            return Response(
                {
                    'message' : 'you are not login!'
                },status=401
            )

关于python - 如何使用 PUT 方法编辑序列化数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59117410/

10-16 22:47
查看更多