2017-08-14 2 views
0

Mes tables de routage actuelles est comme ci-dessous:Comment gérer le gestionnaire de fichiers statiques dans Tornado avec plusieurs dossiers statiques?

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" 
     }) 

Je voudrais utiliser une seule regex pour gérer mes fichiers statiques. Quelque chose comme ci-dessous?

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

Comment puis-je faire cela? Merci d'avance.

+0

Peut-être essayer le sous-classement StaticFileHandler pour spécifier les dossiers que vous voulez –

+0

... En fait, je suis assez sûr routes tornade soutien regex, mais en utilisant Nginx/Apache pour servir les actifs statiques serait plus optimale –

+0

Bonne idée, I Gonna sous-classe StaticFileHandler s'il n'y a pas d'autre solution. Les routes Tornado supportent regex à coup sûr et je préférerais que Tornado gère par lui-même tous les fichiers des projets. – M07

Répondre

1

Un RequestHandler transmet toutes les correspondances en tant qu'arguments positionnels à la fonction http-verbe. Puisque le StaticFileHandler l'étend et que vous avez 2 groupes capturés, votre code ne fonctionnera pas comme prévu. Ainsi, le regex doit être changé, étape par étape:

  1. chemin complet de match: /(.*)
  2. première partie devrait être des polices, js ou css: ((jss|css|fonts)/.*
  3. groupe intérieur ne doit pas être capturé - utiliser de ?:: ((?:jss|css|fonts)/.*

Le code

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

Gardez à l'esprit que le StaitcFileHandler (comme @ cricket_007 CHOISI) ...

Ce gestionnaire est principalement destiné à être utilisé dans le développement et fichiers légers au service; pour un trafic important, il sera plus efficace d'utiliser un serveur de fichiers statique dédié (tel que nginx ou Apache). Nous prenons en charge le mécanisme HTTP Accept-Ranges pour renvoyer un contenu partiel (car certains navigateurs requièrent que cette fonctionnalité soit présente pour rechercher en HTML5 audio ou vidéo).

+0

Ne vous inquiétez pas, je le sais mais je ne vais pas avoir un trafic important. Merci de votre aide. Il fonctionne comme un charme ;) – M07