[PYTHON] [Django] Implementieren Sie eine Funktion zum Hochladen von Bilddateien, die kein Modell verwendet

Einführung

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.

Fazit

Dies kann mit ** forms.ImageField ** erreicht werden.

Stichprobe

Unten finden Sie ein Beispiel für die Mindestkonfiguration.

oberste Seite image.png

Der Bildschirm ändert sich, wenn Sie eine geeignete Bilddatei auswählen und senden. image.png

Wenn Sie sich das Basisverzeichnis des Projekts ansehen, wird ein Ordner "media_root" erstellt und die hochgeladenen Dateien darin gespeichert. image.png

Wenn Sie eine andere Datei als ein Bild hochladen, wird eine Fehlermeldung angezeigt. image.png

Quelle

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

[Django] Implementieren Sie eine Funktion zum Hochladen von Bilddateien, die kein Modell verwendet
Datei-Upload mit Django
Testen Sie das Hochladen von Bildern, indem Sie in Python erstellen, ohne Dummy-Bilddateien in Django zu platzieren
Bild-Upload-Funktion mit Vue.js + Flask
Entwicklung einer WEB-Anwendung mit Django [Modelldefinition]
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Implementieren Sie OAuth ohne Client-Bibliothek (Java)
Holen Sie sich ein Referenzmodell mit Django Serializer
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Führen Sie Python-Dateien mit Django aus HTML aus