Existe-t-il une solution intelligente pour stocker des fichiers statiques dans le répertoire racine de l'application Flask. On s'attend à ce que les robots.txt et sitemap.xml se trouvent dans /, donc mon idée était de créer des routes pour eux:
@app.route('/sitemap.xml', methods=['GET'])
def sitemap():
response = make_response(open('sitemap.xml').read())
response.headers["Content-type"] = "text/plain"
return response
Il doit y avoir quelque chose de plus pratique :)
@vonPetrushev a raison, en production, vous voudrez servir des fichiers statiques via nginx ou apache, mais pour le développement, c'est bien d'avoir votre environnement de développement simple avec votre application python servant également le contenu statique afin que vous n'ayez pas à vous inquiéter sur la modification des configurations et plusieurs projets. Pour ce faire, vous voudrez utiliser le SharedDataMiddleware .
Cet exemple suppose que vos fichiers statiques sont dans le dossier «static», ajustez-les à ce qui convient à votre environnement.
la source
La propre réponse à cette question est la réponse à cette (identique) question :
Résumer:
la source
Même s'il s'agit d'une vieille question avec réponse, je réponds à cela car cet article occupe une place assez importante dans les résultats de Google. Bien que cela ne soit pas couvert dans la documentation, si vous lisez la documentation de l' API pour le constructeur d'objet Flask Application, cela est couvert. En passant le paramètre nommé
static_folder
comme ceci:... vous pouvez définir la provenance des fichiers statiques. De même, vous pouvez définir un
template_folder
, le nom de vousstatic_url_path
.la source
/static
mais vous pouvez changer cela en remplaçantstatic_url_path
.La diffusion de fichiers statiques n'a rien à voir avec une application destinée à fournir un contenu dynamique. La manière correcte de servir les fichiers statiques dépend du serveur que vous utilisez. Après tout, lorsque votre application sera opérationnelle, vous devrez la lier à un serveur Web. Je ne peux parler que pour apache httpd, donc la manière de servir les fichiers statiques est définie dans l'hôte virtuel que vous liez à votre application via mod-wsgi. Voici le guide qui vous montrera comment diffuser des sitemaps, des robots.txt ou tout autre contenu statique: http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Mounting_At_Root_Of_Site
la source
Une autre façon d'envoyer des fichiers statiques consiste à utiliser une règle fourre-tout comme celle-ci:
J'utilise ceci pour essayer de minimiser la configuration lors du développement. J'ai eu l'idée de http://flask.pocoo.org/snippets/57/
De plus, je développe en utilisant flask sur ma machine autonome mais en déployant avec Apache dans un serveur de production. J'utilise:
la source
Cela a peut-être été ajouté depuis que cette question a été posée, mais je regardais dans le "helpers.py" de flask et j'ai trouvé flask.send_from_directory:
... qui fait référence à flask.send_file:
... ce qui semble mieux pour plus de contrôle, bien que send_from_directory transmette ** les options directement à send_file.
la source
De la documentation ici: http://flask.pocoo.org/docs/quickstart/#static-files
la source
J'ai aussi le même dilemme. J'ai fait une recherche et j'ai trouvé ma réponse (MHO):
Autant citer la documentation
IMHO: Lorsque votre application est en production , le service de fichiers statiques doit être (ou est idéalement) configuré sur le serveur Web (nginx, apache); mais pendant le développement , Flask l'a rendu disponible pour servir des fichiers statiques. Ceci vous permet de vous développer rapidement - pas besoin de configurer des serveurs Web et autres.
J'espère que ça aide.
la source
Essaye ça:
la source