1

私のdjango-pistonハンドラー関数では、基本的に2つのことができるようです。フォーマットされていないコンテンツを含む特定のステータスコードを返すこともできます。

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

または、エラーメッセージの辞書を返すことができます。これは、指定されたエミッターに従ってフォーマットできますが、ステータスコードは200です。

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

指定されたエミッターによってフォーマットされているが、カスタマイズされたステータスコードを持つディクショナリまたはモデルオブジェクトを返すにはどうすればよいですか?

4

2 に答える 2

4

これはどう?

def create(...):
    ...    
    resp = rc.BAD_REQUEST
    resp.content = error_dict
    return resp
于 2011-03-03T22:35:48.550 に答える
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)
于 2011-01-02T22:57:13.483 に答える