如何使用django-piston返回非200状态代码的对象?

时间:2011-01-02 21:46:23

标签: django http django-piston

在我的django-piston处理函数中,看起来我基本上可以做两件事。我可以使用一些非格式化的内容返回特定的状态代码:

def create(...):
    ...    
    resp = rc.BAD_REQUEST
    resp.content = 'Some string error message'
    return resp

或者我可以返回错误消息的字典,可以根据指定的发射器格式化,但具有200状态代码:

def create(...):
    ...
    return error_dict

如何返回由指定发射器格式化但具有自定义状态代码的字典或模型对象?

2 个答案:

答案 0 :(得分:4)

这个怎么样?

def create(...):
    ...    
    resp = rc.BAD_REQUEST
    resp.content = error_dict
    return resp

答案 1 :(得分:1)

为了解决这个问题,我在BaseHandler的子类中添加了一个新函数,尽管它可以添加到任何处理程序中。该函数手动调用发射器以正确格式化内容,然后添加内容类型和状态代码。

class MyBaseHandler(BaseHandler):

    def render_response(self, request, response, content):

        em_info = None
        for ext in Emitter.EMITTERS:
            if request.path.find('.'+ext) > -1:
                em_info = Emitter.get(ext)
        if not em_info:
            return rc.NOT_FOUND

        RequestEmitter = em_info[0]

        emitter = RequestEmitter(content, typemapper, self, self.fields, False)
        response.content = emitter.render(request)
        response['Content-Type'] = em_info[1]

        return response

这样称呼:

def create(...):
    ... 
    return self.render_response(request, rc.BAD_REQUEST, error_dict)