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/
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.
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.
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
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)
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).
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
]
c'est tout. Vous pouvez maintenant télécharger du texte, des images et des fichiers audio avec django.
Recommended Posts