default_dispatcherが呼ばれる前に、_methodパラメータを確認して、request.methodの値を該当するメソッドに書き換えればいいので、自前のdispatcherを用意してapp.router.set_dispatcherメソッドでセットしてやる。
def dispatcher(router, request, response):
method = request.get('_method').upper()
if method in ['HEAD', 'OPTIONS', 'PUT', 'DELETE', 'TRACE']:
request.method = method
return router.default_dispatcher(request, response)
app = webapp2.WSGIApplication([
webapp2.Route('/foo', handler=FooHandler),
], debug=True)
app.router.set_dispatcher(dispatcher)