2013-02-02 8 views
7

Ich versuche, eine kleine Website mit einem Index usw. und eine API, die ich will in/api zu bauen.Laufen mehr als eine Klasse in Cherrypy

Zum Beispiel:

class Site(object): 
    @cherrypy.expose 
    def index(self): 
     return "Hello, World!" 
    @cherrypy.expose 
    def contact(self): 
     return "Email us at..." 
    @cherrypy.expose 
    def about(self): 
     return "We are..." 

class Api(object): 
    @cherrypy.expose 
    def getSomething(self, something): 
     db.get(something) 
    @cherrypy.expose 
    def putSomething(self, something) 

So, würde Ich mag zu können, gehen Sie zu mysite.com/contact und mysite.com/Api/putSomething

Wenn ich cherrypy.quickstart(Site()) verwenden, ich Ich erhalte nur die Seiten unter Site.

Ich denke, es gibt eine Möglichkeit, die Klasse Api unter/Api abzubilden, aber ich kann es nicht finden.

Antwort

7

Update (13. März 2017): Die ursprüngliche Antwort unten ist ziemlich veraltet, aber ich lasse es so, wie es ist, um die ursprüngliche Frage zu reflektieren, die gefragt wurde.

The official documentation now has a proper guide on how to achieve it.


Ursprüngliche Antwort:

Blick auf die Standard-Dispatcher. The entire documentation for Dispatching.

der Dokumenten Zitiert:

root = HelloWorld() 
root.onepage = OnePage() 
root.otherpage = OtherPage() 

In dem obigen Beispiel die URL http://localhost/onepage wird bei das erste Objekt Punkt und die URL http://localhost/otherpage wird die zweite bei zeigen. Wie üblich wird diese Suche automatisch durchgeführt.

This link gives even more detail on it with a complete example shown below.

import cherrypy 

class Root: 
    def index(self): 
     return "Hello, world!" 
    index.exposed = True 

class Admin: 
    def user(self, name=""): 
     return "You asked for user '%s'" % name 
    user.exposed = True 

class Search: 
    def index(self): 
     return search_page() 
    index.exposed = True 

cherrypy.root = Root() 
cherrypy.root.admin = Admin() 
cherrypy.root.admin.search = Search() 
+0

Gute Antwort. Nur um hinzuzufügen: Sie können cherrypy.tree.mount auch so oft aufrufen, wie Sie möchten, um Handler hinzuzufügen. – fumanchu

+1

zweiter Link gibt eine 403 – Nate

6

Wie fumanchu erwähnt, können Sie verschiedene Teilabschnitte auf Ihre Website mit mehreren Anrufen zu cherrypy.tree.mount erstellen. Nachfolgend finden Sie eine vereinfachte Version einer Website, die ich auf, dass ich arbeiten beide Front-End-Web-App und eine RESTful API besteht aus einem:

import cherrypy 
import web 

class WebService(object): 

    def __init__(self): 
     app_config = { 
      '/static': { 
       # enable serving up static resource files 
       'tools.staticdir.root': '/static', 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': "static", 
      }, 
     } 

     api_config = { 
      '/': { 
       # the api uses restful method dispatching 
       'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 

       # all api calls require that the client passes HTTP basic authentication 
       'tools.authorize.on': True, 
      } 
     } 

     cherrypy.tree.mount(web.Application(), '/', config=app_config) 
     cherrypy.tree.mount(web.API(), '/api', config=api_config) 

    # a blocking call that starts the web application listening for requests 
    def start(self, port=8080): 
     cherrypy.config.update({'server.socket_host': '0.0.0.0', }) 
     cherrypy.config.update({'server.socket_port': port, }) 
     cherrypy.engine.start() 
     cherrypy.engine.block() 

    # stops the web application 
    def stop(self): 
     cherrypy.engine.stop() 

eine Instanz von WebService Erstellen initialisiert zwei verschiedene Web-Anwendungen. Die erste ist meine Front-End-Anwendung, die bei web.Application lebt und bei / serviert wird. Die zweite ist meine erholsame API, die bei web.API lebt und bei /api serviert wird.

Die zwei Ansichten haben unterschiedliche Konfigurationen. Ich habe beispielsweise angegeben, dass die API Methodenvermittlung verwendet, und dass der Zugriff darauf von der HTTP-Standardauthentifizierung gesteuert wird.

Sobald Sie eine Instanz von WebService erstellen, können Sie bei Bedarf starten oder stoppen, und es kümmert sich um die gesamte Bereinigung.

Ziemlich coole Sachen.

Verwandte Themen