如何使用django-piston返回格式化的错误消息和正确的HTTP代码?

时间:2010-10-04 11:52:27

标签: django api rest django-piston

我希望能够使用django-piston返回带有格式化内容的HTTP响应。

我想我必须创建自己的rc_factory

我想做的是:

return rc.404({'status': 0,'message': 'This restaurant does not exists.'})

XMLEmiter,JSONEmiter或YAMLEmiter提供的结果与客户端正在寻找的格式有关。

我该怎么做?

干杯

1 个答案:

答案 0 :(得分:1)

你怎么看待这样的事情:

# -*- coding: utf-8 -*-
from piston.handler import typemapper
from piston.emitters import Emitter

def getErrorResponse(http_code, payload, em_format='json'):
        emitter, ct = Emitter.get(em_format)
        srl = emitter(payload, typemapper, handler=None, anonymous=False)
        r = srl.render({})
        return HttpResponse(r, content_type=ct, status=http_code)

要像这样使用:

return getErrorResponse(404, {'status': 0,'message': 'This restaurant does not exists.'})

但问题来自em_format属性。

实际上,hander方法可以通过在处理函数中添加emitter_format属性来获取此信息。

...
    def read(self, request, emitter_format=None):
        if emitter_format is None:
            emitter_format = request.GET.get('format', 'json')

        ...
        return getErrorResponse(404, {'status': 0,'message': 'This restaurant does not exists.'}, emitter_format)