【问题标题】:How to return an object with non-200 status code with django-piston?如何使用 django-piston 返回具有非 200 状态码的对象?
【发布时间】:2011-01-02 21:46:23
【问题描述】:

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

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

或者我可以返回一个错误消息字典,可以根据指定的发射器进行格式化,但状态码为200:

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

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

【问题讨论】:

    标签: django http django-piston


    【解决方案1】:

    这个怎么样?

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

    【讨论】:

      【解决方案2】:

      为了解决这个问题,我在 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)
      

      【讨论】:

        猜你喜欢
        • 2018-11-23
        • 2020-01-21
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-02
        • 1970-01-01
        相关资源
        最近更新 更多