Laden Sie eine Datei in Django . hoch

Vaibhav Vaibhav 30 Januar 2023
  1. Stellen Sie die Django-Umgebung ein
  2. Django-Projekt einrichten
  3. Testen Sie den Server
  4. settings.py-Datei aktualisieren
  5. Erstellen Sie ein Modell
  6. Erstellen Sie ein Formular zum Hochladen von Dateien
  7. Ansichten hinzufügen
  8. Konfigurieren Sie die Datei urls.py
  9. Testen
Laden Sie eine Datei in Django . hoch

In diesem Artikel erfahren Sie, wie Sie Dateien in Django hochladen. Wir erstellen eine einfache Anwendung mit einem einfachen Formular zum Ausfüllen von Details und Auswählen einer Datei. Zeigen Sie außerdem alle hochgeladenen Dateien in einer Tabelle darunter an.

Bevor wir fortfahren, wird empfohlen, einen neuen Ordner oder ein neues Verzeichnis für dieses Projekt zu erstellen, um die Organisation zu gewährleisten.

Stellen Sie die Django-Umgebung ein

Für dieses Tutorial verwenden wir eine virtuelle Umgebung. Es ist nicht zwingend erforderlich, eine virtuelle Umgebung zu verwenden, aber es empfiehlt sich, für jedes Projekt eine eigene virtuelle Umgebung zu haben.

Um eine virtuelle Umgebung aufzubauen, benötigen wir ein Python-Paket, virtualenv. Wenn Sie es nicht auf Ihrem Computer haben, können Sie es mit dem folgenden Befehl herunterladen.

pip install virtualenv

Nachdem Sie das Paket installiert haben, erstellen wir nun die Umgebung.

Führen Sie den folgenden Befehl aus, um eine Umgebung zu erstellen.

virtualenv environment

environment ist der Name der virtuellen Umgebung, die wir gerade erstellt haben. In dieser Umgebung wird die Python-Version global auf Ihrem Computer installiert und es werden keine Pakete außer den Standardpaketen installiert.

Führen Sie den folgenden Befehl aus, um diese Umgebung zu aktivieren und zu verwenden.

environment\Scripts\activate

Da wir nun etwas über Django erfahren, müssen wir die Django-Bibliothek installiert haben. Da wir lernen, Dateien hochzuladen, benötigen wir außerdem ein zusätzliches Python-Paket, um mit den Bildern umzugehen. Der Paketname ist Pillow. Lassen Sie uns alle Abhängigkeiten installieren.

pip install django
pip install Pillow

Oder,

pip3 install django
pip3 install Pillow

Beachten Sie, dass zum Zeitpunkt des Schreibens dieses Artikels die neueste Django-Version 3.2 ist.

Django-Projekt einrichten

Um ein Django-Projekt einzurichten, müssen wir zunächst ein Django-Projekt erstellen, eine Anwendung erstellen, diese Anwendung registrieren und die ersten Migrationen durchführen.

Führen Sie den folgenden Befehl aus, um ein Django-Projekt zu erstellen.

django-admin startproject DjangoFileUpload

Ändern Sie nun das Arbeitsverzeichnis mit dem folgenden Befehl in dieses Projekt.

cd DjangoFileUpload

Führen Sie den folgenden Befehl aus, um eine Anwendung innerhalb des Django-Projekts zu erstellen.

django-admin startapp Core

Oder,

python manage.py startapp Core

Core ist der Name der Anwendung.

Um diese Anwendung zu registrieren, geben Sie den Namen der Anwendung in die Liste INSTALLED_APPS in der Datei settings.py ein.

  • settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "Core",  # Here
]

Django braucht ein paar Modelle, um richtig zu funktionieren. Beispielsweise funktioniert das Authentifizierungssystem oder der Superuser ohne die anfängliche Migration nicht. Führen Sie also den folgenden Befehl aus, um die ersten Migrationen durchzuführen.

python manage.py migrate

Ausgabe:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

Testen Sie den Server

Um den Server auszuführen, verwenden Sie den folgenden Befehl. Wenn alles fehlerfrei gelaufen ist, sollten Sie Ihren Django-Server unter http://127.0.0.1:8000/ laufen sehen.

python manage.py runserver

settings.py-Datei aktualisieren

Die hochgeladenen Dateien müssen irgendwo gespeichert werden. In Django werden standardmäßig alle hochgeladenen Dateien in einem media-Ordner gespeichert. Sie können den Namen des Ordners und die damit verbundene URL jederzeit ändern, aber wir werden uns an die Standardnamenskonvention halten.

Um die URL zu den Mediendateien MEDIA_URL und den Pfad zum Medienordner MEDIA_ROOT zu definieren, fügen Sie die folgenden Anweisungen in die Datei settings.py ein.

  • settings.py
import os

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

Vergessen Sie nicht, das Modul os zu importieren. Andernfalls gibt Python einen Fehler aus.

Erstellen Sie ein Modell

Um die hochgeladenen Dateien zu speichern, müssen wir ein Modell erstellen. Das Feld in diesem Modell enthält den Pfad zur hochgeladenen Datei, aber nicht die Datei selbst.

Wir erstellen ein Modell Document, um die Details zu den hochgeladenen Dateien zu speichern.

  • Core\models.py
from django.db import models


class Document(models.Model):
    title = models.CharField(max_length=200)
    uploadedFile = models.FileField(upload_to="Uploaded Files/")
    dateTimeOfUpload = models.DateTimeField(auto_now=True)

Das Modell verfügt über ein Feld title mit Zeichentyp, um einen benutzerdefinierten Titel für die hochgeladene Datei zu speichern, und dateTimeOfUpload speichert Datum und Uhrzeit des Datei-Uploads. Das Datum-Uhrzeit-Feld wird beim Erstellen des Modellobjekts automatisch festgelegt.

Zum Speichern der Dateien verwenden wir FileField(). Dieser Typ umfasst alle Arten von Dateien. Wenn Sie jedoch bei Bildern etwas spezifisch sein möchten, können Sie die Bilder mit dem ImageField() speichern. Für alle anderen Felder müssen Sie bei FileField() bleiben.

Der Parameter upload_to wird verwendet, um den Ordner zu definieren, in den die Dateien dieses Modells in den Ordner media hochgeladen werden.

Bevor wir dieses Modell verwenden, müssen wir Migrationen durchführen und sie migrieren. Führen Sie dazu die beiden folgenden Befehle aus.

python manage.py makemigrations
python manage.py migrate

Erstellen Sie ein Formular zum Hochladen von Dateien

Erstellen Sie innerhalb der Anwendung oder des Ordners Core einen neuen Ordner, nämlich templates. Erstellen Sie in diesem Ordner einen weiteren Ordner, nämlich Core. Dies sollte der Name Ihrer Anwendung sein. Erstellen Sie zum Schluss eine neue Datei in diesem Ordner, nämlich upload-file.html.

Jetzt sollten Sie eine Dateistruktur wie diese haben.

DjangoDateiUpload/
    DjangoDateiUpload/
        __init__.py
        asgi.py
        settings.py
        urls.py
        wsgi.py
    db.sqlite3
    manage.py
    Ader/
        Migrationen/
        Vorlagen/
            Ader/
                Upload-Datei.html
        __init__.py
        admin.py
        apps.py
        modelle.py
        test.py
        ansichten.py

Fügen Sie in der upload-file.html folgenden HTML-Code hinzu.

  • Core\templates\Core\upload-file.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Django File Upload</title>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

        * {
            font-family: "Roboto";
        }

        body {
            background-color: #F5F5F5;
        }

        form {
            background-color: #FFFFFF;
            padding: 25px;
        }

        table {
            width: 100%; 
            text-align: center;
            margin-top: 25px;
            padding: 25px;
            background-color: #FFFFFF;
        }

        table tr td {
            padding-top: 15px;            
        }
    </style>
</head>
<body>
    <form action="{% url 'Core:uploadFile' %}" method="POST" enctype="multipart/form-data">
        <input type="text" name="fileTitle" placeholder="Enter a title">
        <input type="file" name="uploadedFile">
        {% csrf_token %}
        <input type="submit" value="Upload">
    </form>
    <table>
        <tr>
            <th>ID</th>
            <th>Title</th>
            <th>File Path</th>
            <th>Upload Date & Time</th>
        </tr>
        {% for file in files %}
            <tr>
                <td>{{ file.id }}</td>
                <td>{{ file.title }}</td>
                <td>{{ file.uploadedFile.url }}</td>
                <td>{{ file.dateTimeOfUpload }}</td>
            </tr>
        {% endfor %}
    </table>
</body>
</html>

In der Tabelle werden einige Details zu den hochgeladenen Dateien angezeigt.

Ansichten hinzufügen

Um die HTML-Vorlage und Informationen dazu anzuzeigen und die Datei-Uploads zu speichern und zu verarbeiten, erstellen wir eine Ansicht uploadFile().

Beziehen Sie sich auf den folgenden Code

  • Core\views.py
from . import models
from django.shortcuts import render


def uploadFile(request):
    if request.method == "POST":
        # Fetching the form data
        fileTitle = request.POST["fileTitle"]
        uploadedFile = request.FILES["uploadedFile"]

        # Saving the information in the database
        document = models.Document(title=fileTitle, uploadedFile=uploadedFile)
        document.save()

    documents = models.Document.objects.all()

    return render(request, "Core/upload-file.html", context={"files": documents})

Diese Ansicht rendert die HTML-Vorlage, die wir gerade im vorherigen Abschnitt erstellt haben. Das Formular in der HTML-Vorlage wird an dieselbe URL gesendet und in dieser Ansicht behandelt. Wenn die Methode der Anfrage POST ist, holen wir die im Formular eingegebenen Informationen und die hochgeladene Datei ab, speichern diese Informationen im Modell und speichern das Modell.

Ansonsten holen wir im allgemeinen Fall alle hochgeladenen Dateien und senden sie in einem Kontext-Dictionary zur Anzeige auf der HTML-Vorlage.

Konfigurieren Sie die Datei urls.py

Als letztes richten wir die URLs ein. Bevor wir fortfahren, erstellen Sie eine neue Datei, nämlich urls.py in der Anwendung oder im Ordner Core. Diese Datei enthält alle URLs, die dieser Django-Anwendung zugeordnet sind. Es empfiehlt sich, für jede Django-Anwendung eine separate Datei urls.py zu haben.

Fügen Sie in dieser Datei den folgenden Code hinzu.

from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static

app_name = "Core"

urlpatterns = [
    path("", views.uploadFile, name="uploadFile"),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Wir haben ein URL-Muster für das HTML-Template upload-file.html hinzugefügt. Außerdem haben wir eine weitere URL für die Mediendateien hinzugefügt. Wir verwenden die konstanten Variablen, die wir in der Datei settings.py deklariert haben.

Da wir innerhalb der Anwendung Core eine neue Datei urls.py erstellt haben, müssen wir die hier definierten URLs mit dem Hauptprojekt verknüpfen.

Fügen Sie dazu die folgende Anweisung in die Liste urlpatterns in DjangoFileUpload\urls.py ein.

path("", include("Core.urls")),

Ihre Datei sollte ungefähr so ​​aussehen.

Datei: DjangoFileUpload\urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("Core.urls")),
]

Testen

Herzliche Glückwünsche! Jetzt ist es Zeit, das Projekt zu testen. Folgen Sie den unteren Schritten.

  • Starten Sie den Server mit dem Befehl - python manage.py runserver
  • Gehen Sie zur URL http://127.0.0.1:8000/
  • Füllen Sie das Formular mit einem Titel aus, wählen Sie eine Datei aus und senden Sie das Formular ab.

Jetzt sollten Sie in der Tabelle unter dem Formular einige Details zu der Datei sehen.

Wenn Sie außerdem Ihr Arbeitsverzeichnis überprüfen, sehen Sie, dass ein Ordner mit dem Namen media erstellt wurde, und in diesem Ordner befindet sich ein weiterer Ordner mit dem Namen Uploaded Files. Dieser Ordner enthält alle hochgeladenen Dateien.

Sie können Fotos, Videos, Programme, PDFs, JSON-Dateien, HTML-Dateien usw. hochladen. Beachten Sie, dass die Upload-Zeit von der Größe der Datei abhängt, haben Sie also beim Hochladen Geduld.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.