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.
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