Servir des fichiers statiques dans Flask
Servir des fichiers statiques est une tâche courante dans le développement Web. Flask propose plusieurs méthodes pour gérer cela, notamment en utilisant la route de dossiers statiques intégrée ou la fonction send_from_directory.
Route de dossiers statiques intégrée
Flask crée automatiquement un route pour les fichiers statiques sous /static/
from flask import url_for @app.route('/') def home(): return url_for('static', filename='css/style.css')
Fonction send_from_directory
La fonction send_from_directory vous permet de servir des fichiers à partir de n'importe quel répertoire de votre application. Il prend deux arguments : le répertoire de base et le chemin du fichier demandé. Il garantit que le chemin demandé est contenu dans le répertoire de base, empêchant ainsi les attaques par traversée de répertoire.
from flask import send_from_directory @app.route('/reports/<path:path>') def send_report(path): return send_from_directory('reports', path)
Remarque :
N'utilisez pas send_file ou send_static_file avec user- chemins fournis, car cela peut vous exposer à des vulnérabilités. Utilisez plutôt send_from_directory, qui est conçu pour gérer en toute sécurité les chemins fournis par l'utilisateur.
Servir des fichiers en mémoire
Si vous devez servir un fichier généré dans mémoire sans l'écrire sur le disque, vous pouvez utiliser BytesIO pour créer un objet fichier en mémoire et le transmettre à send_file. Vous devrez également spécifier le nom du fichier, le type de contenu et d'autres attributs.
from io import BytesIO import zipfile @app.route('/download.zip') def download_zip(): buffer = BytesIO() zipfile.ZipFile(buffer, 'w').write('file.txt') buffer.seek(0) return send_file(buffer, mimetype='application/zip', as_attachment=True, attachment_filename='download.zip')
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!