如何使用PUT方法编辑序列化数据



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

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 函数而不是 edit:

def put(request):
...

若要使用序列化程序,请在视图函数中使用serializers.save()函数:

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

基于视图函数的保存函数将调用更新(用于放置函数(、创建(用于发布函数(和销毁(用于删除函数(。 如果要从序列化程序类实例化,必须将模型对象作为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
)

最新更新