Tastypie从DELETE请求返回数据? [英] Tastypie return data from DELETE requests?

查看:149
本文介绍了Tastypie从DELETE请求返回数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的资源,我想执行一个DELETE。成功后,我想获取被删除的对象的ID。根据文档, 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 继承):


  1. obj_delete 删除该对象。


  2. 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):

  1. obj_delete which deletes the object.

  2. delete-detail which is called on a DELETE request and calls obj_delete then returns a 204 No Content or 404 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆