2009-07-02 7 views
4

Lassen Sie uns sagen, dass ich einen Code haben (mit CherryPy), der wie folgt aussieht:Helfen Sie mir, besser zu verstehen CherryPy PageHandlers

import cherrypy 

class Names: 
    def index(self, name=None): 
     return "Names.index: " + str(name) 
    index.exposed = True 

class Root: 
    def index(self): 
     return "This is the root" 
    index.exposed = True 

if __name__ == "__main__": 
    root = Root() 

    root.names = Names() 

    cherrypy.tree.mount(root, '/') 
    cherrypy.engine.start() 
    cherrypy.engine.block() 

Wenn ich die URL getroffen http://localhost:8080/names/, ich sehe Names.index: Keine Das ist in Ordnung. Das bedeutet, dass die Names() -Klasse aufgerufen wird.

Aber wenn ich zu http://localhost:8080/names/mark gehen, bekomme ich einen 404-Fehler statt der Names.index: mark ich erwartet hatte.

Das verwirrt mich, weil nach der PageHandler Dokumentation:

Wenn eine Anforderung verarbeitet wird, die URI in seine Bestandteile aufgespalten wird, und jede ist, um gegen die Knoten im Baum abgestimmt. Alle nachfolgenden Komponenten sind Komponenten des virtuellen Pfads und werden als Positionsargumente übergeben.

Lassen Sie uns jetzt sagen, dass ich die Namen() der Klasse ändern wie folgt aussehen:

class Names: 
    def index(self, name=None): 
     return "Names.index: " + str(name) 
    index.exposed = True 

    def name(self, name=None): 
     return "Names.name: " + str(name) 
    name.exposed = True 

Jetzt kann ich zu http://localhost:8080/names/name/mark gehen, und ich sehe Names.name: mark.

Kann jemand erklären, was hier passiert?

Antwort

3

Die Index Methode ist eine Ausnahme zu den partial matching Regeln. Sie können stattdessen die Standard Methode verwenden, oder in diesem speziellen Beispiel Namen eine Methode selbst machen.

+0

Ausgezeichnet. Danke für die Information. –

Verwandte Themen