Hochladen von Medien in Django

Salman Mehmood 20 Juni 2023
Hochladen von Medien in Django

In diesem Demo-Artikel sehen wir uns eine kurze Einführung zu den Mediendateien an und schauen uns auch an, wie wir Mediendateien im Django-Projekt betreiben können.

Laden Sie Medien mit MEDIA_ROOT und MEDIA_URL in Django hoch

Django hat standardmäßig eine Standardmethode für den Umgang mit Dateien im lokalen Dateisystem.

Wenn Sie jemals Ihre Einstellungen im Django-Projekt durchgesehen haben, haben Sie wahrscheinlich MEDIA_ROOT und MEDIA_URL gesehen, und in einem anderen Projekt haben Sie wahrscheinlich gesehen, wo Sie Zugriff auf Dateien auf der MEDIA_URL haben.

Jetzt werden wir uns damit befassen, wie Sie es in Ihrem Django-Projekt einrichten.

Zum Beispiel haben wir das Demo-Projekt und darin eine Dokumenten-App. Wenn wir uns das Modell im Inneren ansehen, sehen wir das Dokumentmodell mit einem Titel- und einem Datei-Feld.

Im Feld Datei haben wir das Schlüsselwortargument upload_to gleich Dokumenten, was bedeutet, wo immer Dateien hochgeladen werden. Wir möchten alle Dateien für dieses Objekt in einem Unterordner von Dokumenten ablegen.

Code:

from django.db import models


class Document(models.Model):
    title = models.CharField(max_length=128, blank=True)
    file = models.FileField(upload_to="documents", max_length=200)

Das erste, was wir also brauchen, um unsere Konfiguration zu starten, ist, unsere settings.pys zu öffnen.

Wenn Sie oben in Ihren Einstellungen sind, sehen Sie eine Basis oder Konstante. Dies geht an die Wurzel unseres Projekts und ermöglicht es uns, einen basierten Pfad einzurichten.

Code:

BASE_DIR = Path(__file__).resolve().parent.parent

Wenn wir zum Ende unserer setting.py-Datei springen, beginnen wir mit einem MEDIA_ROOT und setzen os.path.join. Dann werden wir BASE_DIR als Medium beitreten, was bedeutet, dass wir den Medienordner in unserem Projekt definieren, in den wir alle unsere Dateien hochladen werden.

Als nächstes werden wir unsere MEDIA_URL festlegen, damit Django unsere URLs richtig erstellen kann. Das bedeutet auch, dass Medien das erste sind, was wir am Ende unseres Domainnamens sehen, um auf von Benutzern hochgeladene Inhalte zuzugreifen.

Code:

# Manage media
import os

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

Das nächste, was wir einrichten müssen, ist unser URL-Routing, um diese auf unserem lokalen Computer mit Hilfe der Datei urls.py richtig anzuzeigen. Also müssen wir unsere urls.py öffnen, eine static()-Methode aufrufen und unsere Einstellungen für MEDIA_URL und MEDIA_ROOT verwenden.

Wir benötigen eine statische Datei; Dann weiß die Datei urls.py, wo eine richtige URL erstellt werden muss, um sie lokal abzurufen.

Die statische Methode generiert die URLs korrekt. Wir müssen unsere Einstellung importieren, weil das Interessante an dieser statischen Methode ist, dass sie nur lokal funktioniert, nicht in der Produktion.

Das heißt, wenn Sie in der Produktion ein Debug auf False gesetzt haben, funktioniert dies nicht. Sie müssen den von Ihnen verwendeten Webserver ordnungsgemäß konfigurieren, um Ihren Medienordner ordnungsgemäß bereitzustellen.

Code:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    path("admin/", admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Als letztes müssen wir einen Medienordner im Stammverzeichnis unseres Projekts erstellen und uns darum kümmern, indem wir einen Dokumentenordner in unserem Medienordner erstellen.

Wenn wir zu unserem Django-Admin-Panel gehen und versuchen, ein neues Bild hochzuladen, können wir eine Datei hochladen. Wenn Sie sich dieses Bild nach dem Hochladen in Ihrem Dokumentenordner ansehen, sehen Sie, dass es korrekt hochgeladen wurde.

Wir haben jetzt eine gute Einführung in die Konfiguration der Medien-URL im Medienstamm. Wenn Benutzer Dateien auf Ihr System hochladen, weiß das Backend, wo sie abgelegt und wohin sie gezogen werden sollen.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn