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.
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.
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.
Lassen Sie uns die Homepage öffnen und sehen, ob wir sie herunterladen können oder nicht.
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