Lors du téléchargement d'un fichier image avec l'application Django, je pense que c'est une pratique standard de l'enregistrer dans la base de données en utilisant ImageField. Cependant, l'application que j'ai créée l'autre jour en pratique doit enregistrer le fichier dans un dossier spécifique au lieu de ** en raison de l'intégration avec d'autres systèmes **, et il a fallu un certain temps pour savoir comment le faire, j'ai donc écrit un article Je vais le laisser.
Ceci peut être réalisé en utilisant ** forms.ImageField **.
Vous trouverez ci-dessous un exemple de la configuration minimale.
haut de page
L'écran change lorsque vous sélectionnez un fichier image approprié et que vous l'envoyez.
Si vous regardez le répertoire de base du projet, un dossier "racine_média" est créé et les fichiers téléchargés y sont enregistrés.
Si vous téléchargez un fichier autre qu'une image, un message d'erreur s'affiche.
forms.py
import datetime
from django import forms
from django.core.files.storage import default_storage
class FileUploadSampleForm(forms.Form):
file = forms.ImageField()
def save(self):
"""Méthode pour enregistrer le fichier"""
now_date = datetime.datetime.now().strftime('%Y%m%d%H%M%S') #Obtenez pour donner l'heure actuelle au nom du fichier
upload_file = self.files['file'] #Récupérez le fichier de téléchargement à partir du formulaire
file_name = default_storage.save(now_date + "_" + upload_file.name, upload_file) #Enregistrer le fichier La valeur de retour est le nom du fichier réellement enregistré
return default_storage.url(file_name)
views.py
from django.shortcuts import render
from django.views.generic import View
from .forms import FileUploadSampleForm
class IndexView(View):
def get(self, request, *args, **kwargs):
"""Méthode de demande GET"""
form = FileUploadSampleForm
return render(request, 'fileUploadSample/index.html', {"form": form})
def post(self, request, *args, **kwargs):
"""Méthode de demande POST"""
form = FileUploadSampleForm(request.POST, request.FILES)
if not form.is_valid():
return render(request, 'fileUploadSample/index.html', {"form": form})
filename_save = form.save()
context = {
'form': form,
'filename_save': filename_save,
}
return render(request, 'fileUploadSample/index.html', context)
index = IndexView.as_view()
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'fileUploadSample:index' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{#forms.Afficher le champ d'image#}
{{ form.file }}
<br><br>
{#Afficher le message d'erreur#}
{% for field in form %}
{% if form.errors %}
<font color=#CC3300>{{ field.errors }}</font><br>
{% endif %}
{% endfor %}
{#Afficher le nom du fichier enregistré#}
{% if filename_save %}
nom de fichier{{ filename_save }}Il a été enregistré dans.
<br><br>
{% endif %}
<input type="submit" value="Envoyer"/>
</form>
</body>
</html>
urls.py
from django.urls import path
from . import views
app_name = 'fileUploadSample'
urlpatterns = [
path('', views.index, name='index'),
]
Veuillez ajouter ce qui suit à settings.py.
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
Vous pouvez également utiliser ** forms.FileField ** pour prendre en charge le téléchargement de fichiers autres que des images (même s'il ne s'agit pas d'un fichier image, form.is_valid () éliminera l'erreur).
c'est tout. Merci pour votre travail acharné: cat2:
Recommended Posts