2016-08-01 5 views
0

Von einer URL des Formulars: /foo/(.*)/bar/(.*) möchte ich Dateien bereitstellen, wobei der tatsächliche Pfad aus den 2 erfassten Gruppen berechnet wird. Mein Problem ist, dass StaticFileHandler get() nur 1 Pfadparameter nimmt. Gibt es eine Möglichkeit, dies zum Laufen zu bringen, ohne die meisten Methoden von StaticFileHandler neu implementieren zu müssen?Tornado StaticFileHandler-Pfad für mehrere Regex-Erfassungsgruppen

Meine aktuelle Problemumgehung ist, alles zu erfassen: (/foo/.*/bar/.*), aber dann muss ich eine ähnliche Regex in einer überschriebenen get_absolute_path() analysieren.

Antwort

1

Es gibt keine Möglichkeit, dies zu tun, ohne StaticFileHandler zu erweitern. Es wäre eine kleine Änderung:

from tornado import gen, web 

class CustomStaticFileHandler(web.StaticFileHandler): 

    def get(self, part1, part2, include_body=True): 
     # mangle path 
     path = "dome_{}_combined_path_{}".format(part1, part2) 
     # back to staticfilehandler 
     return super().get(path, include_body) 

    # if you need to use coroutines on mangle use 
    # 
    # @gen.coroutine 
    # def get(self, part1, part2, include_body=True): 
    #  path = yield some_db.get_path(part1, part2) 
    #  yield super().get(path, include_body) 

app = web.Application([ 
    (r"/foo/(.*)/bar/(.*)", CustomStaticFileHandler, {"path": "/tmp"}), 
]) 
+0

Danke, das funktioniert. Es sollte beachtet werden, dass Sie auch validate_absolute_path überschreiben müssen ODER sicherstellen, dass der "Pfad", den Sie bei der Handler-Deklaration angegeben haben, ein übergeordnetes Verzeichnis jedes von Ihnen generierten Pfades ist. – Gnurfos