Maison > développement back-end > Tutoriel Python > Comment puis-je servir efficacement des fichiers statiques dans une application Flask ?

Comment puis-je servir efficacement des fichiers statiques dans une application Flask ?

Susan Sarandon
Libérer: 2024-12-21 01:07:10
original
385 Les gens l'ont consulté

How Can I Serve Static Files Efficiently in a Flask Application?

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/ chemin. Pour servir des fichiers statiques à partir de cette route, placez-les simplement dans le dossier statique à côté de votre module d'application Flask. Vous pouvez ensuite utiliser url_for pour créer un lien vers les fichiers statiques.

from flask import url_for

@app.route('/')
def home():
    return url_for('static', filename='css/style.css')
Copier après la connexion

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)
Copier après la connexion

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')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal