Maison >développement back-end >Tutoriel Python >Compétences en matière de téléchargement de fichiers dans le framework Django

Compétences en matière de téléchargement de fichiers dans le framework Django

WBOY
WBOYoriginal
2023-06-18 08:24:064694parcourir

Ces dernières années, les applications Web sont devenues de plus en plus populaires et nombre d'entre elles nécessitent une fonctionnalité de téléchargement de fichiers. Dans le framework Django, il n'est pas difficile d'implémenter la fonction de téléchargement de fichiers, mais dans le développement réel, nous devons également traiter les fichiers téléchargés. D'autres opérations incluent la modification des noms de fichiers, la limitation de la taille des fichiers et d'autres problèmes. Cet article partagera quelques techniques de téléchargement de fichiers dans le framework Django.

1. Éléments de téléchargement du fichier de configuration
Dans le projet Django, pour configurer le téléchargement de fichier, vous devez le configurer dans le fichier settings.py. Ci-dessous, nous présentons plusieurs éléments de configuration importants.

  1. Chemin de téléchargement des fichiers
    Dans settings.py, nous pouvons définir le chemin pour stocker les fichiers téléchargés, comme suit :

    MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')

    Dans cet élément de configuration, nous définissons le répertoire racine pour stocker les fichiers téléchargés en tant que téléchargements, le chemin du média fichiers Il est calculé par rapport au répertoire où se trouve le fichier settings.py. Nous pouvons également ajouter des règles d'URL correspondantes dans le urls.py du projet Django afin que les utilisateurs puissent obtenir des fichiers téléchargés en accédant à l'URL.

  2. Formats de fichiers pris en charge
    Le contrôle du format de fichier est un contenu très important Nous pouvons spécifier le format des fichiers téléchargés via les éléments de configuration suivants.

    ALLOWED_FILE_TYPES = ['jpg', 'jpeg', 'png', 'gif', 'pdf']

    Notez que nous devons convertir tous les formats de fichiers en lettres minuscules.

  3. Limite de taille de fichier
    Le framework Django limite la taille de tous les fichiers à 2,5 Mo maximum par défaut. Si nous devons modifier cette valeur limite, nous pouvons la modifier dans l'élément de configuration settings.py.

    MAX_UPLOAD_SIZE = 10485760 # 10MB

    Dans cette configuration, nous limitons la taille maximale du fichier de téléchargement à 10 Mo.

2. Téléchargement de fichiers
Nous pouvons télécharger des fichiers via les composants du formulaire Django. Voici un exemple simple de formulaire de téléchargement de fichier :

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="document" accept=".pdf">
    <input type="submit" value="Submit">
</form>

Notez que l'attribut enctype doit être multipart/form-data pour prendre en charge le téléchargement de fichiers.

Dans la fonction d'affichage, nous pouvons utiliser la méthode request.FILES.get() pour obtenir le fichier téléchargé. Cette méthode renvoie un objet fichier. Voici un exemple simple :

def upload(request):
    if request.method == 'POST':
        file = request.FILES.get('document')
        if file:
            handle_uploaded_file(file)
            messages.success(request, '上传成功')
            return redirect('home')
        else:
            messages.error(request, '上传失败')
            return redirect('upload')
    else:
        return render(request, 'upload.html')

Dans cet exemple, nous obtenons d'abord l'objet fichier téléchargé, puis appelons la fonction handle_uploaded_file() pour l'enregistrer dans le chemin spécifié. En l'absence de fichiers téléchargés, nous pouvons envoyer des messages d'erreur aux utilisateurs via le module de messages.

3. Nommage des fichiers
Afin de mieux gérer les fichiers téléchargés sur le serveur, nous vous recommandons de nommer les fichiers téléchargés avec un nom de fichier unique contenant un horodatage. Voici un exemple simple :

def handle_uploaded_file(file):
    date = datetime.now().strftime("%Y%m%d%H%M%S")
    filename = f"{date}_{file.name}"
    path = os.path.join(MEDIA_ROOT, filename)
    with open(path, 'wb+') as destination:
        for chunk in file.chunks():
            destination.write(chunk)

Tout d'abord, nous utilisons le module datetime pour obtenir la date et l'heure actuelles et les convertir au format chaîne. Nous combinons ensuite cet horodatage avec le nom de fichier d'origine pour générer un nouveau nom de fichier. Enfin, nous combinons le nouveau nom de fichier avec le chemin d'accès au fichier téléchargé et écrivons le contenu du fichier téléchargé dans le fichier à l'aide de la méthode chunks() de l'objet fichier.

4. Taille du fichier
Afin d'éviter des problèmes de serveur, nous devons limiter la taille des fichiers téléchargés. Voici une fonction simple de vérification de la taille du fichier :

def check_file_size(file):
    if file.size > MAX_UPLOAD_SIZE:
        raise ValidationError(f'上传文件大小最大为 {MAX_UPLOAD_SIZE / 1048576} MB')

Dans cette fonction, nous vérifions si la taille du fichier téléchargé dépasse la taille maximale de téléchargement. S'il dépasse, nous lançons une exception ValidationError et invitons l'utilisateur. Gérez cette exception dans la fonction d'affichage :

def upload(request):
    if request.method == 'POST':
        file = request.FILES.get('document')
        if file:
            try:
                check_file_size(file)
            except ValidationError as e:
                messages.error(request, e)
                return redirect('upload')
            else:
                handle_uploaded_file(file)
                messages.success(request, '上传成功')
                return redirect('home')
        else:
            messages.error(request, '上传失败')
            return redirect('upload')
    else:
        return render(request, 'upload.html')

De cette façon, nous avons un meilleur contrôle sur la taille du fichier téléchargé.

Résumé :

  1. L'implémentation du téléchargement de fichiers dans le framework Django nécessite certaines configurations, notamment la définition du chemin de téléchargement du fichier, les formats de fichiers pris en charge et la limitation de la taille du fichier.
  2. Le téléchargement de fichiers est implémenté via le composant de formulaire Django et la fonction d'affichage peut obtenir le fichier téléchargé via la méthode request.FILES.get().
  3. Une fois le fichier téléchargé, nous vous recommandons de renommer le fichier et d'utiliser l'horodatage pour générer un nom de fichier unique.
  4. Limitez la taille des fichiers téléchargés.

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!

Déclaration:
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