我在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.
答案 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