我创建了一个 编辑 函数来编辑用户的用户名。
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/