2016-05-12 11 views
0

Ich habe eine Webanwendung, die auf Flaschen-Web-Framework ausgeführt wird. Flask konnte die Anwendungsanforderungen nicht mehr erfüllen. Also haben wir uns entschieden, Tornado zu migrieren. Ich muss unter zwei Anfragen behandeln.Python Tornado, wie ID von einer Kante

/entry GET Method 
/entry/id GET Method 
  1. Wenn die erste Anforderung nannte es authentifizierten Eintrag zurückgeben muss.
  2. Wenn die zweite Anforderung nannte es den Eintrag, dessen entry_id zurückgeben muss ist id

Gibt es eine andere schöne Lösung oben Anfrage außer meine Lösung zu handhaben. Die Lösung, die ich gefunden habe, erzeugt zyklomatische Komplexität.

def get(self): 
    id = self.request.path.split('/')[-1] 
    if id is None: 
     #return authenticated user 
    else: 
     #return the user whose entry_id is id 

Hinweis: Ich suche eine Lösung wie folgt aus:

@rest_user.route('/user', methods=['GET']) 
    #some code 
@rest_user.route('/user/<user_id>', methods=['GET']) 
    #some code 

Antwort

2

Die analoge Anordnung in Tornado verwendet zwei Handler-Klassen (vielleicht mit einer gemeinsamen Basisklasse für gemeinsam genutzte Methoden):

class AuthedUserHandler(RequestHandler): 
    def get(self): 
     ... 

class UserHandler(RequestHandler): 
    def get(self, user_id): 
     ... 

app = Application([ 
    ('/user', AuthedUserHandler), 
    ('/user/(.*)', UserHandler), 
]) 
Verwandte Themen