在obj_create方法中返回tastypie中的自定义消息

时间:2015-02-04 12:59:55

标签: python tastypie

我在tastypie中编写Rest API并创建自定义资源,如下所示

class Myresource(Resource):
      def obj_create(self, request, **kwargs):
          # logic when POST request is called
          # here if some error occurs while inserting data I want to add my custom error message and return it response. 
          return bundle

如何从obj_create消息返回自定义错误消息。现在我处理异常,但tastypie总是返回201.

1 个答案:

答案 0 :(得分:0)

我认为您需要覆盖资源中的wrap_view方法here

这就是它应该如何运作。

class YourResource(ModelResource):

def wrap_view(self, view):
    """
    Wraps views to return custom error codes instead of generic 500's
    """
    @csrf_exempt
    def wrapper(request, *args, **kwargs):
        try:
            callback = getattr(self, view)
            response = callback(request, *args, **kwargs)

            if request.is_ajax():
                patch_cache_control(response, no_cache=True)

            # response is a HttpResponse object, so follow Django's instructions
            # to change it to your needs before you return it.
            # https://docs.djangoproject.com/en/dev/ref/request-response/
            return response
        except (BadRequest, ApiFieldError), e:
            return HttpBadRequest({'code': 666, 'message':e.args[0]})
        except ValidationError, e:
            # Or do some JSON wrapping around the standard 500
            return HttpBadRequest({'code': 777, 'message':', '.join(e.messages)})
        except Exception, e:
            # Rather than re-raising, we're going to things similar to
            # what Django does. The difference is returning a serialized
            # error message.
            return self._handle_500(request, e)

    return wrapper