Django-Download-Datei

Salman Mehmood 15 Februar 2024
Django-Download-Datei

Dieser Artikel zeigt, wie Sie eine Website erstellen, auf der der Administrator eine Datei hochladen und den Benutzer veranlassen kann, eine Datei von einer Webseite in Django herunterzuladen.

Hochladen und Herunterladen einer Datei in Django

Lassen Sie uns zum Terminal gehen und ein Demoprojekt erstellen, um es Ihnen zu demonstrieren. Folgen Sie den Befehlen, um ein Django-Projekt und eine App in diesem Projekt zu erstellen.

django-admin startproject django_project
python manage.py startapp blog

Lassen Sie uns dieses neu erstellte Django-Projekt im verfügbaren Texteditor öffnen.

Wir werden zuerst einen Ordner für unsere hochgeladenen Dateien erstellen, also öffnen wir settings.py. Suchen Sie die Liste INSTALLED_APPS und übergeben Sie den App-Namen als Element.

INSTALLED_APPS = [
    "blog.apps.BlogConfig",
]

Jetzt müssen wir einen Ordner erstellen, in den die Dateien hochgeladen werden. Suchen Sie die Variable STATIC_URL und schreiben Sie den folgenden Code unter die Variable.

STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]

Jetzt müssen wir unsere MEDIA_URL auf '/media/' setzen und dann MEDIA_ROOT einstellen, was der Name des Ordners wäre, in dem die hochgeladenen Dateien gespeichert werden.

MEDIA_ROOT = os.path.join(BASE_DIR, "media_cdn")

Jetzt fügen wir unsere Medien- und statischen Regeln zu urls.py hinzu. Lassen Sie uns den Pfad für die Funktionen home und download definieren, die aus der Datei views.py ziehen.

Wir werden auch die URL für die Download-Datei festlegen.

Wir können das Objekt url nicht verwenden, da es veraltet ist. Stattdessen können wir also einfach das Objekt re_path verwenden.

re_path(r"^download/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT})

In unserem Fall verwenden wir diesen Code.

Upload und Download einer Datei in Django

Lassen Sie uns unser Modell in der Datei models.py erstellen, und in diesem Modell werden wir zwei Felder haben. Das erste Feld wäre ein FileField und das zweite ein CharField.

Wir müssen auch eine String-Dunder-Methode erstellen, um den Titel der Seite zurückzugeben.

Eine Datei in Django 2 hochladen und herunterladen

Wir müssen unser FilesAdmin-Modell in der admin.py-Datei registrieren.

from .models import FilesAdmin

admin.site.register(FilesAdmin)

Wir erstellen eine home.html-Datei innerhalb der Blog-Vorlagen im Blog-Ordner. Lassen Sie uns den folgenden Code in der Datei home.html zwischen dem Body-Tag hinzufügen.

{% for post in file %}
<h2>{{post.title}}</h2>
<a href="{{post.adminupload.url}}" download="{{post.adminupload.url}}">Download</a>
 {% endfor %}

Wir erhalten alle Objekte aus dem FilesAdmin-Modell in der home-Funktion. Übergeben Sie dann den Kontext in der Datei home.html und rendern Sie diese Seite.

Wir müssen unsere Funktionen home und download in der Datei views.py definieren. Wir erhalten den Pfad in der download-Funktion, wo die Datei standardmäßig heruntergeladen wird.

In der nächsten Zeile prüfen wir, ob das Verzeichnis existiert oder nicht. Dann öffnen wir eine Datei im lesenden Binärmodus und geben sie in der HTTP-Antwort zurück.

from django.http import HttpResponse, Http404
from django.conf import settings
import os
from django.shortcuts import render
from requests import Response
from .models import FilesAdmin


def home(request):
    # get all objects
    OUR_CONTEXT = {"file": FilesAdmin.objects.all()}
    return render(request, "blog/home.html", OUR_CONTEXT)


def download(request, path):
    # get the download path
    download_path = os.path.join(settings.MEDIA_ROOT, path)
    if os.path.exists(download_path):
        with open(download_path, "rb") as fh:
            response = HttpResponse(fh.read(), content_type="application/adminupload")
            response["Content-Disposition"] = "inline; filename=" + os.path.basename(
                download_path
            )
            return response
    raise Http404

Jetzt müssen wir die Migration durchführen, indem wir diese Befehle ausführen.

python manage.py makemigrations
python manage.py migrate

Erstellen Sie einen Superuser.

python manage.py createsuperuser

Lassen Sie uns den Django-Server ausführen und versuchen, eine MP3-Datei aus dem Admin-Panel hochzuladen.

MP3-Datei in Django hochladen

Lassen Sie uns die Homepage öffnen und sehen, ob wir sie herunterladen können oder nicht.

Datei in Django herunterladen

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