[PYTHON] Téléchargement de fichiers avec django

0.0 Contenu principal

Je vais résumer le téléchargement de fichiers avec django (versino 3.1 dans cet article). En lisant cet article 1 Télécharger le texte 2 Télécharger l'image 3 Télécharger l'audio Vous pouvez découvrir comment procéder. Cet article s'adresse principalement aux django et aux débutants en programmation, mais on suppose que le contenu de base de l'image globale de l'architecture de django est connu.

Aussi, dans cet article, 1 Démarrez le projet avec la commande suivante dans le répertoire post_file.

  $ django-admin startproject post_file . 

2 Ensuite, créez des répertoires de modèles, statiques et multimédias et supposez que la structure des répertoires est la suivante.

$ project/(Répertoire de projets)
  .
  │── config/(Répertoire de configuration)
  │   │── __init__.py
  │   │── settings.py
  │   │── urls.py
  │   │── wsgi.py
  │── post_file_app/(Répertoire d'applications)
  │   │── __initi__.py  
  │   │── admin.py
  │   │── apps.py 
  │   │── migrations
  │   │   │── __init__.py 
  │   │── models.py 
  │   │── test.py
  │   │── views.py
  │── manage.py
  │── template/ 
  │── static/
  │── media/
  │   │──image/ 
  │   │──audio/ 

1.0 Flux principal jusqu'au téléchargement du fichier

Concernant le téléchargement de fichiers 1 Télécharger depuis l'écran de l'administrateur (par l'administrateur du site) 2 Téléchargement depuis le formulaire utilisateur (par l'utilisateur du site) Il y a deux possibilités, nous allons donc les classer ci-dessous.

1.1 Téléchargement depuis l'écran de l'administrateur (par l'administrateur du site)

1.1.1 Ajoutez les paramètres à settings.py.

project/config/settings.py


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'post_file_app',#Ajoute ça
    'media',#Ajoute ça
]

BASE_DIR = Path(__file__).resolve(strict=True).parent.parent#Ajoute ça
MEDIA_ROOT = os.path.join(BASE_DIR,'media')#Ajoute ça
MEDIA_URL = '/media/'#Ajoute ça

Dans django, les images téléchargées et les fichiers audio ne sont pas stockés directement dans la base de données, mais sont stockés dans un fichier préparé à l'avance, et le fichier est acquis à partir de ce chemin si nécessaire. Dans ce qui précède, le répertoire à stocker est spécifié par MEDIA_ROOT.

De plus, MEDIA_URL est un paramètre qui attribue une URL appelée / media / <nom_fichier> lors de l'affichage d'un fichier.

1.1.2 Définir la disposition des données à télécharger dans model.py

project/post_file_app/model.py


class PostFile(models.Model):
    usersname = models.CharField(max_length=50)#Téléchargement de texte
    image =models.ImageField(upload_to='images/',verbose_name='image',null=True,blank=True)#Téléchargement d'image
    audio = models.FileField(default='', upload_to='audio/')#Téléchargement audio
    def __str__(self):
        return self.usersname

Notez que CharField, ImageField et FileField sont utilisés correctement en fonction de ce que vous téléchargez. N'oubliez pas de migrer le modèle avec les deux commandes suivantes.

$ python manage.py makemigrations
$ python manage.py migrate  

1.1.3 Ajoutez des paramètres à admin.py afin que vous puissiez télécharger à partir de l'écran de l'administrateur

Vous ne pouvez pas télécharger à partir de l'écran administrateur en définissant simplement la classe PostFile dans model.py. En ajoutant à admin.py comme indiqué ci-dessous, vous pouvez télécharger à partir de l'écran de l'administrateur.

project/post_file_app/admin.py



from .models import PostFile
admin.site.register(PostFile)

1.2 Téléchargement depuis le formulaire utilisateur (par l'utilisateur du site)

Dans ce cas, en plus du simple téléchargement depuis l'écran administrateur, un nouveau 1 Créez un formulaire de saisie (créez un fichier html, créez form.py) 2 Mise en œuvre de la validation des fichiers téléchargés (décrire la logique dans views.py) (Cependant, je n'écrirai pas moi-même la validation dans cet article, donc j'écrirai un peu de code).

1.2.1 Créer un formulaire de saisie

Tout d'abord, préparez un fichier html. Créez un fichier post.html dans le répertoire project / template / et écrivez-le comme suit.

project/template/post.html


<!doctype html>
<html lang="en">
    <head>
    </head>
    <body >
    <form method="POST" action='' enctype='multipart/form-data'>{% csrf_token %}
   {{ form.username }}
   {{ form.image }}
   {{ form.audio }}
    </body>
</html>

Tout d'abord, encenctype = 'multipart / form-data' doit être décrit dans la balise de formulaire html lors du téléchargement d'une image ou d'un fichier audio. Si cela est omis, django ne pourra pas récupérer les images et les fichiers audio plus tard.

De plus, {% csrf_token%} est comme un sort et est requis lors du téléchargement de fichiers.

De plus, le nom d'utilisateur, l'image et l'audio doivent correspondre aux noms de variables (nom d'utilisateur, image, audio) déjà écrits dans project / post_file_app / model.py.

Ensuite, créez un nouveau form.py dans post_file_app et ajoutez ce qui suit pour créer un formulaire d'entrée.

project/post_file_app/form.py


from django import forms
from .models import PostFile


class PostFileForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
        self.fields['username'].widget.attrs.update({'placeholder':'text'})
        self.fields['image'].widget.attrs.update({'placehodler':'image upload'})
        self.fields['audio'].widget.attrs.update({'placehodler':'audio upload'})
    class Meta:
        model = TestPost
        fields = ('text','image','audio')

Pour afficher le dernier formulaire créé, créez une vue dans views.py et attribuez une URL à la vue dans urls.py.

project/post_file_app/views.py


from django.shortcuts import render,redirect
from django.views.generic import CreateView
from .forms import PostFileForm

class PostFileView(CreateView):
    def post(self,request,*args,**kwargs):
        form = PostFileForm(request.POST,request.FILES)
        content_dict={
            'form':form
        }
        if not form.is_valid():#Vérifier si le fichier est correctement saisi (validation)
            return render(request,'error.html')#error.html n'est pas créé dans l'article, mais veuillez le préparer vous-même.
        form.save()
        return redirect('success_page')
    def get(self,request,*args,**kwargs):
        form = PostFileForm(data=request.GET)
        return render(request,'post.html',{'form':form,})

Ici, il y a une variable appelée form, mais veuillez la faire correspondre avec le form.username, form.image et form.audio de post.html mentionné ci-dessus. De plus, il existe request.POST et request.FILES comme arguments de PostFileForm (). Le premier est ce dont django a besoin pour obtenir le texte et le second pour obtenir les fichiers image et audio.

project/post_file_app/urls.py


from django.urls import path
from .views import Register,LoginView,LogoutView
from mystudio.views import RenderPostedSong
from .views import PostSongView,TestPostView,TestPostView,RenderTestPost

urlpatterns = [
    path('post_file_view/',PostFileView.as_view(),name='post_file_view'),
    path('success/',success,name='success_page',#La vue n'est pas définie dans cet article
    path('error/',error,name='error_page',#La vue n'est pas définie dans cet article
]

la fin

c'est tout. Vous pouvez maintenant télécharger du texte, des images et des fichiers audio avec django.

Recommended Posts

Téléchargement de fichiers avec django
Téléchargement de fichiers avec Flask + jQuery
Créer un téléchargeur de fichiers avec Django
Internationalisation avec Django
CRUD avec Django
Django 1.11 a démarré avec Python3.6
Organiser les fichiers de modèle Django
Résumé du développement avec Django
Sortie PDF avec Django
Sortie Markdown avec Django
Opération de fichier avec open - "../"
Utiliser Gentelella avec Django
Twitter OAuth avec Django
Premiers pas avec Django 1
Envoyer des e-mails avec Django
Utilisez LESS avec Django
La mutualisation mécanise avec Django
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Premiers pas avec Django 2
[Django] Implémenter une fonction de téléchargement de fichier image qui n'utilise pas de modèle
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Environnement de site Web de configuration minimale avec django
Créer une API avec Django
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Déployer Django sans serveur avec Lambda
Python3 + Django ~ Mac ~ avec Apache
Dessiner un fichier netCDF avec python
Créer une page d'accueil avec django
Télécharger un fichier sur Dropbox
Transfert de fichiers rapide avec tissu
Téléchargement d'images et personnalisation avec django-ckeditor
Lancez-vous avec Django! ~ Tutoriel ④ ~
Premiers pas avec Python Django (4)
Créer une application Web avec Django
Premiers pas avec Python Django (3)
Combinez Fast API avec Django ORM
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Transfert de fichiers bidirectionnel dans Pythonista 3
Utilisez Django pour enregistrer les données de tweet
Effectuer le cryptage AES avec DJango
Introduction à Python Django (6)
Combinez deux images avec Django
Premiers pas avec Django avec PyCharm
Web en temps réel avec les chaînes Django
Suppression de double envoi avec Django
Framework Django REST avec Vue.js
Télécharger le fichier csv avec python
Utilisez prefetch_related commodément avec Django
Créer un fichier xlsx avec XlsxWriter
Premiers pas avec Python Django (5)
Connectez-vous avec Django Rest Framework
Qiita API Oauth avec Django
Développement piloté par les tests avec Django Partie 3
recharger dans le shell django avec ipython
Téléchargeons des fichiers S3 avec CLI
Étapes pour développer Django avec VSCode
Extraire le fichier xz avec python
Développement piloté par les tests avec Django Partie 4
Charger les modules Django avec un interpréteur