【发布时间】:2018-07-09 11:03:17
【问题描述】:
我上周刚开始学习 django,所以如果我完全以错误的方式解决这个问题,请原谅我的无知。
所以我一直在关注thinkster tutorial 设置允许在模型中更改密码的用户模型。到目前为止,我有一个指向此视图的 url (/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 测试此功能。
目前,当我使用 Postman 向 URL 发送 GET 请求时,我得到以下响应:
响应基于我的使用 JWT 身份验证的身份验证类。 我的问题是,如何使用 Postman HTTP 请求触发更新功能。
【问题讨论】:
-
如果您希望执行
CRUD操作,请使用DRF'sModelViewset
标签: django rest http django-rest-framework django-views