Kombination des REST-Dispatchers mit dem Standard-Dispatcher in einer einzigen CherryPy-App

Ich versuche CherryPy dazu zu bringen, Anfragen an zu bearbeiten/api übercherrypy.dispatch.MethodDispatcher() und alle anderen Anfragen (wie/) zu einem Standard-Dispatcher.

Nachdem ich CherryPys Dokument gelesen habe, habe ich keine Ahnung, wie das geht. Sie verwenden beide Routing-Methoden nur getrennt, aber das ist eine so grundlegende Sache, dass ich glaube, dass es zusammenarbeiten muss.

#!/usr/local/bin/python2.7
import cherrypy


class Root(object):
    @cherrypy.expose
    def index(self):
        return 'Hello world'

class RestAPI(object):
    @cherrypy.expose
    def POST(self, blah):
        return 'ok'

cherrypy.config.update({
    'global': {
        'environment': 'production',
        'server.socket_host': '127.0.0.1',
        'server.socket_port': 8080,
    }
})


root = Root()
root.api = RestAPI()

conf = {
    '/api': {
        'request.dispatch': cherrypy.dispatch.MethodDispatcher()
    }
}

cherrypy.quickstart(root, '', config=conf)

Durch einen Anrufcurl 'http://localhost:8080/' es gibt mirHello world welches ist richtig.
Aber anrufencurl -X POST 'http://localhost:8080/api' gibt nur 404 zurück.

Übrigens sind die genau die gleiche Frage ohne AntwortCherryPy MethodDispatcher mit mehreren URL-Pfaden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage