Tastypie从DELETE请求返回数据? [英] Tastypie return data from DELETE requests?
问题描述
always_return_data
- 指定所有HTTP方法(DELETE除外)应返回数据的序列化形式。 http:// django-tastypie.readthedocs.org/en/latest/resources.html#always-return-data
类SimpleResource(resource.MongoEngineResource):
class Meta:
queryset = Simple.objects.all()
resource_name ='simple'
allowed_methods =('get','put' ,'post','delete','patch')
always_return_data = True
问题:
是否有序列化数据以返回被删除的对象?
查看源和文档,您似乎需要覆盖 #modelresource-methodsrel =nofollow> ModelResource
(其中 MongoEngineResource
继承):
-
obj_delete
删除该对象。 -
delete-detail
,在DELETE请求中调用,并调用o bj_delete
然后返回一个204无内容
或404未找到
我没有使用过Tastypie,所以这一切都来自于文档,但至少是一个起点。你需要为你的班级做这样的事情:
class SimpleResource(resources.MongoEngineResource):
class Meta:
queryset = Simple.objects.all()
resource_name ='simple'
allowed_methods =('get','put','post','delete','patch' )
always_return_data = True
def obj_delete(self,bundle,** kwargs):
try:
#获取包的实例。 obj将被删除
deleted_obj = self.obj_get(bundle = bundle,** kwargs)
除了ObjectDoesNotExist:
raise NotFound(找不到与提供的参数匹配的模型实例。 )
#调用delete,从数据库中删除obj
super(MongoEngineResource,self).obj_delete(bundle,** kwargs)
return deleted_obj
def delete_detail(self,request,** kwargs):
bundle = Bundle(request = request)
try:
#调用我们的obj_delete,存储我们返回的deleted_obj
deleted_obj = self.obj_delete(bundle = bundle,** self.remove_api_resource_names (kwargs))
#用删除的obj构建一个新的包,并在响应中返回
deleted_bundle = self.build_bundle(obj = deleted_obj,request = request)
deleted_bundle = self.full_dehydrate (deleted_bundle)
deleted_bundle = self.alter_detail_data_to_serialize(request,deleted_bundle)
返回self.create_response(request,deleted_bundle,response_class = http.HttpNoContent)
除了NotFound:
返回http。 HttpNotFound()
I have a simple resource that I would like perform a DELETE. On success I would like to get the ID of the object that was deleted. As per the docs, always_return_data
- Specifies all HTTP methods (except DELETE) should return a serialized form of the data.
http://django-tastypie.readthedocs.org/en/latest/resources.html#always-return-data
class SimpleResource(resources.MongoEngineResource):
class Meta:
queryset = Simple.objects.all()
resource_name = 'simple'
allowed_methods = ('get', 'put', 'post', 'delete', 'patch')
always_return_data = True
Question: Is there anyway to serialize data to return the object that was deleted?
Looking at the source and documentation for tastypie, it looks like you'll need to override two functions of ModelResource
(which MongoEngineResource
inherits):
obj_delete
which deletes the object.delete-detail
which is called on a DELETE request and callsobj_delete
then returns a204 No Content
or404 Not Found
I haven't worked with tastypie so this is all from looking at the documentation, but it's at least a starting point. You'll need to do something like this to your class:
class SimpleResource(resources.MongoEngineResource):
class Meta:
queryset = Simple.objects.all()
resource_name = 'simple'
allowed_methods = ('get', 'put', 'post', 'delete', 'patch')
always_return_data = True
def obj_delete(self, bundle, **kwargs):
try:
# get an instance of the bundle.obj that will be deleted
deleted_obj = self.obj_get(bundle=bundle, **kwargs)
except ObjectDoesNotExist:
raise NotFound("A model instance matching the provided arguments could not be found.")
# call the delete, deleting the obj from the database
super(MongoEngineResource, self).obj_delete(bundle, **kwargs)
return deleted_obj
def delete_detail(self, request, **kwargs):
bundle = Bundle(request=request)
try:
# call our obj_delete, storing the deleted_obj we returned
deleted_obj = self.obj_delete(bundle=bundle, **self.remove_api_resource_names(kwargs))
# build a new bundle with the deleted obj and return it in a response
deleted_bundle = self.build_bundle(obj=deleted_obj, request=request)
deleted_bundle = self.full_dehydrate(deleted_bundle)
deleted_bundle = self.alter_detail_data_to_serialize(request, deleted_bundle)
return self.create_response(request, deleted_bundle, response_class=http.HttpNoContent)
except NotFound:
return http.HttpNotFound()
这篇关于Tastypie从DELETE请求返回数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!