2017-08-14 2 views
0

Meine aktuellen Routing-Tabellen sind wie folgt:Wie behandelt man statische Dateihandler in Tornado mit mehreren statischen Ordnern?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/css/(.*)", StaticFileHandler, { 
      "path": "my-website-path/css" 
     }), 
     ("/js/(.*)", StaticFileHandler, { 
      "path": "my-website-path/js" 
     }), 
     ("/fonts/(.*)", StaticFileHandler, { 
      "path": "my-website-path/fonts" 
     }) 

ich nur ein regulären Ausdruck verwenden möchte meine statischen Dateien zu handhaben. Etwas wie unten?

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/(css|js|fonts)/(.*)", StaticFileHandler, { 
      "path": "my-website-path/$1" 
     }) 

Wie kann ich das tun? Vielen Dank im Voraus.

+0

Subklassen die Ordner geben Sie –

+0

Eigentlich will ... Ich bin ziemlich sicher, dass Tornado Routen regex unterstützen, aber wäre optimal –

+0

Gute Idee Nginx/Apache mit statischen Vermögenswerte dienen, ich gonna Unterklasse der StaticFileHandler, wenn es keine andere Lösung gibt. Tornado-Routen unterstützen Regex sicher und ich würde es vorziehen, dass Tornado alle Dateien der Projekte selbst handhabt. – M07

Antwort

1

A RequestHandler Übergeben Sie alle Übereinstimmungen als Positionsargumente an die http-Verb-Funktion. Da die StaticFileHandler es erweitert und Sie 2 Gruppen erfasst haben, wird Ihr Code nicht wie erwartet funktionieren. So muss die Regex geändert werden, Schritt für Schritt:

  1. Spiel gesamten Pfad: /(.*)
  2. ersten Teil Fonts sein sollte, js oder CSS: ((jss|css|fonts)/.*
  3. die innere Gruppe nicht erfasst werden sollte - nutzen von ?:: ((?:jss|css|fonts)/.*

der Code

routing_table = [ 
     ("/api/ping", PingHandler), 
     ("/((?:css|js|fonts)/.*)", StaticFileHandler, { 
      "path": "my-website-path" 
     } 

Denken Sie daran, dass die StaitcFileHandler (wie @ cricket_007 erwähnt) ...

Dieser Handler in erster Linie für die Bedienung Gebrauch bestimmt ist in der Entwicklung und light-duty-Datei; Bei hohem Datenaufkommen ist es effizienter, einen dedizierten statischen Dateiserver (z. B. nginx oder Apache) zu verwenden. Wir unterstützen den HTTP-Accept-Ranges-Mechanismus, um partiellen Inhalt zurückzugeben (da einige Browser diese Funktionalität benötigen, um in HTML5-Audio oder Video zu suchen).

Vielleicht die StaticFileHandler versuchen
+0

Keine Sorge, ich weiß das, aber ich werde keinen schweren Verkehr haben. Danke für Ihre Hilfe. Es wirkt wie ein Zauber ;) – M07

Verwandte Themen