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.