簡體   English   中英

如何使用 PUT 方法編輯序列化數據

[英]How can i use PUT method to edit Serialized data

我創建了一個編輯功能來編輯用戶的用戶名。

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 類中,您應該使用 from put 函數而不是編輯:

def put(request):
    ...

要使用序列化程序,請在您的視圖函數中使用serializers.save()函數

def put(request):
    ....
    s.save()

save函數,基於view函數會調用update(對於put函數),create(對於post函數),destroy(對於delete函數)。 當您想從序列化器類實例化時,您必須將模型對象作為instance傳遞,並將數據作為data屬性傳遞。 總之,您的視圖函數將是這樣的:

  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
            )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM