REST フレームワークとして web.py を使用して HTTP エラー コードを処理する方法を理解しようとしています。簡単に try/catch ブロックを使用して HTTP 404、400、500 などを返すことができますが、カスタム JSON メッセージを送信するのに苦労しています。
import web
import json
urls = (
'/test/(.*)', 'Test'
)
app = web.application(urls, globals())
def notfound():
return web.notfound(json.dumps({'test': 'test'}))
class Test:
def GET(self, id):
web.header('Content-Type', 'application/json')
return self.get_resource(str(id))
def get_resource(self, id):
result = {}
if id == '1':
result = {'1': 'one'}
elif id == '3':
return web.notfound()
return json.dumps(result)
if __name__ == '__main__':
web.config.debug = False
app.notfound = notfound
app.run()
これは正常にid == 3
動作しますが、動作をオーバーライドできず、Content-Type
ヘッダーが複製される場合:
# curl -i -H "Accept: application/json" http://localhost:8080/test/3
HTTP/1.1 404 Not Found
Content-Type: application/json
Content-Type: text/html
Transfer-Encoding: chunked
Date: Mon, 09 Sep 2013 23:59:28 GMT
Server: localhost
404 Not Found
カスタム メッセージを含む JSON コンテンツ タイプを返すにはどうすればよいですか?