Beim Hochladen einer Bilddatei mit der Django-App halte ich es für eine Standardpraxis, sie mit ImageField in der Datenbank zu speichern. Die App, die ich neulich in der Praxis erstellt habe, muss die Datei jedoch in einem bestimmten Ordner anstatt ** aufgrund der Integration mit anderen Systemen ** speichern. Ich habe eine Weile gebraucht, um herauszufinden, wie das geht, und habe einen Artikel geschrieben. Ich werde es verlassen.
Dies kann mit ** forms.ImageField ** erreicht werden.
Unten finden Sie ein Beispiel für die Mindestkonfiguration.
oberste Seite
Der Bildschirm ändert sich, wenn Sie eine geeignete Bilddatei auswählen und senden.
Wenn Sie sich das Basisverzeichnis des Projekts ansehen, wird ein Ordner "media_root" erstellt und die hochgeladenen Dateien darin gespeichert.
Wenn Sie eine andere Datei als ein Bild hochladen, wird eine Fehlermeldung angezeigt.
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):
"""Methode zum Speichern der Datei"""
now_date = datetime.datetime.now().strftime('%Y%m%d%H%M%S') #Geben Sie dem Dateinamen die aktuelle Uhrzeit ein
upload_file = self.files['file'] #Holen Sie sich die Upload-Datei aus dem Formular
file_name = default_storage.save(now_date + "_" + upload_file.name, upload_file) #Datei speichern Der Rückgabewert ist der Name der tatsächlich gespeicherten Datei
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):
"""Methode für GET-Anfrage"""
form = FileUploadSampleForm
return render(request, 'fileUploadSample/index.html', {"form": form})
def post(self, request, *args, **kwargs):
"""Methode für POST-Anfrage"""
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.Bildfeld anzeigen#}
{{ form.file }}
<br><br>
{#Fehlermeldung anzeigen#}
{% for field in form %}
{% if form.errors %}
<font color=#CC3300>{{ field.errors }}</font><br>
{% endif %}
{% endfor %}
{#Namen der gespeicherten Datei anzeigen#}
{% if filename_save %}
Dateiname{{ filename_save }}Es wurde gespeichert in.
<br><br>
{% endif %}
<input type="submit" value="Senden"/>
</form>
</body>
</html>
urls.py
from django.urls import path
from . import views
app_name = 'fileUploadSample'
urlpatterns = [
path('', views.index, name='index'),
]
Bitte fügen Sie der Datei settings.py Folgendes hinzu.
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
Sie können auch ** forms.FileField ** verwenden, um das Hochladen anderer Dateien als Bilder zu unterstützen (auch wenn es sich nicht um eine Bilddatei handelt, wird der Fehler durch form.is_valid () behoben).
das ist alles. Vielen Dank für Ihre harte Arbeit: cat2:
Recommended Posts