Laden Sie eine Datei in Django . hoch
- Stellen Sie die Django-Umgebung ein
- Django-Projekt einrichten
- Testen Sie den Server
-
settings.py
-Datei aktualisieren - Erstellen Sie ein Modell
- Erstellen Sie ein Formular zum Hochladen von Dateien
- Ansichten hinzufügen
-
Konfigurieren Sie die Datei
urls.py
- Testen
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.