django - Django Rest-“serializer.data”是空的dict(),即使“serializer”有详细的数据
问题描述
我试图根据 stackoverflow 上的一些建议来实现密码更改,但有些东西不起作用,这对我来说真的很奇怪。故障排除后,我得到了想法数据,但我的视图不起作用。将序列化器操作更改为打印我看到数据“serializer.data”是结果“{}”,即使“打印(序列化器)”给出结果。
序列化程序.py
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(max_length=128, write_only=True, required=True)
new_password1 = serializers.CharField(
max_length=128, write_only=True, required=True
)
new_password2 = serializers.CharField(
max_length=128, write_only=True, required=True
)
def validate_old_password(self, value):
user = self.context["request"].user
if not user.check_password(value):
raise serializers.ValidationError(
{
"old_passowrd": _(
"Your old password was entered incorrectly. Please enter it again."
)
}
)
return value
def validate(self, data):
if data["new_password1"] != data["new_password2"]:
raise serializers.ValidationError(
{"new_password2": _("The two password fields didn't match.")}
)
validate_password(data["new_password1"], self.context["request"].user)
return super().validate(data)
视图.py
class ChangePassword(UpdateAPIView):
serializer_class = ChangePasswordSerializer
permission_classes = [IsAuthenticated]
def get_object(self, queryset=None):
return self.request.user
def update(self, request, *args, **kwargs):
self.object = self.get_object()
serializer = self.get_serializer(data=request.data)
if serializer.is_valid(raise_exception=True):
# user.set_password(serializer.data.get("new_password1"))
# user.save()
print(serializer.data)
return Response("Success", status=status.HTTP_204_NO_CONTENT)
return Response(serializer.errors, status.HTTP_400_BAD_REQUEST)
解决方案
序列化表示时不包括“write_only=True”字段。如果要调试,可以打印request.data
或删除参数 write_only 或将其设置为 False。
推荐阅读
- sql - 计算最后一天和公司同一分支机构的价值
- xml - Flutter - 基于 XML 文件的动态页面设计(通过 REST API)
- javascript - 在 Openlayers 6 中移动一个点
- javascript - 如何导出电子邮件模板并使用 react-email-editor 传递道具?
- asp.net - ASP.NET 论坛应用:获得点赞最多的答案
- reactjs - 从useState反应setState函数不更新状态值
- c++ - 求解函数在以下程序中不起作用
- c# - 无法更新通过数据集连接到数据库的行
- python - 如何在不改变数字位数的情况下从十进制转换为八进制?(Python)
- algorithm - 填充树的 Dp 方法和递归