我很熟悉我可以设置always_return_data
为True
让服务器返回序列化数据POST
并PUT
请求。但是有没有办法我可以专门要求在特定POST
呼叫而不是所有POST/PUT
呼叫中返回数据?
问问题
144 次
3 回答
2
您可以在或方法中always_return_data
设置True
并手动删除捆绑包中的所有数据,但这只会导致返回一个空的 JSON(或您喜欢的任何序列化)对象,这并不完全是一个空响应。dehydrate
alter_detail_data_to_serialize
想要的行为可能最明确的方法是覆盖<method>_list
and<method>_detail
函数并根据您的需要实现是否返回数据的决定。
这是一个示例,post_list
它需要一个名为 GET-Parameterreturn_data
来决定:
def post_list(self, request, **kwargs):
deserialized = self.deserialize(request, request.raw_post_data, format=request.META.get('CONTENT_TYPE', 'application/json'))
deserialized = self.alter_deserialized_detail_data(request, deserialized)
bundle = self.build_bundle(data=dict_strip_unicode_keys(deserialized), request=request)
updated_bundle = self.obj_create(bundle, **self.remove_api_resource_names(kwargs))
location = self.get_resource_uri(updated_bundle)
return_data = updated_bundle.request.GET.get('return_data', None)
if not return_data is None:
updated_bundle = self.full_dehydrate(updated_bundle)
updated_bundle = self.alter_detail_data_to_serialize(request, updated_bundle)
return self.create_response(request, updated_bundle, response_class=http.HttpCreated, location=location)
else:
return http.HttpCreated(location=location)
于 2013-02-26T17:18:41.920 回答
1
我建议在您希望返回数据的帖子中添加一个额外的参数。如果参数存在于 post 变量中,则将所需的数据添加到 dehydrate 中的包中
于 2013-02-26T14:50:20.207 回答
1
在我看来,最好的方法是覆盖脱水方法并设置 always_return_data=True:
class SomeModelResource(ModelResource):
class Meta:
queryset = SomeModel.objects.all()
always_return_data=True
def dehydrate(self, bundle):
if request.META['REQUEST_METHOD'] == 'POST' and\
request.POST.get('param', None)=='PARAM':
bundle.data = dict(id=bundle.obj.pk,
name=bundle.obj.name)
return bundle
于 2013-02-26T23:22:11.387 回答