我上周刚开始学习django,所以如果我完全错误地解决了这个问题,请原谅我的无知。
因此,我一直遵循thinkster tutorial设置用户模型,该模型允许更改模型中的密码。到目前为止,我有一个指向该视图的网址(/ api / user):
class UserRetrieveUpdateAPIView(RetrieveUpdateAPIView):
permission_classes = (IsAuthenticated,)
renderer_classes = (UserJSONRenderer,)
serializer_class = UserSerializer
def retrieve(self, request, *args, **kwargs):
#turns the object recieved into a JSON object
serializer = self.serializer_class(request.user)
return Response(serializer.data, status=status.HTTP_200_OK)
def update(self, request, *args, **kwargs):
serializer_data = request.data
serializer = self.serializer_class(
request.user, data=serializer_data, partial=True
)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
我了解此部分:
serializer = self.serializer_class(
request.user, data=serializer_data, partial=True
)
serializer.is_valid(raise_exception=True)
serializer.save()
将按照以下方式调用序列化程序类:
class UserSerializer(serializers.ModelSerializer):
#This class handles serialization and deserialization of User objects
password = serializers.CharField(
max_length=128,
min_length=8,
write_only=True
)
class Meta:
model = User
fields = ('email', 'username', 'password', 'token',)
read_only_fields=('token',)
def update(self, instance, validated_data):
#performs an update on the user
password = validated_data.pop('password', None)
#have to take out password because setattr does not handle hashing etc
for (key, value) in validated_data.items():
#for the keys after taking out password set them to the updating User instance
setattr(instance, key, value)
if password is not None:
instance.set_password(password) #set_password is handled bydjango
instance.save() #set_password does not save instance
return instance
再次我理解本节将基本上采用request.data
并“更新”模型。但是,我对如何使用Postman测试此功能感到困惑。
当前,当我使用邮递员向URL发送GET
请求时,得到以下响应:
响应基于我的使用JWT身份验证的身份验证类。 我的问题是,如何使用邮递员HTTP请求触发该更新功能。