Django ダウンロード ファイル
この記事では、管理者がファイルをアップロードし、ユーザーが Django の Web ページからファイルをダウンロードできる Web サイトを作成する方法を示します。
Django でのファイルのアップロードとダウンロード
ターミナルに移動して、デモンストレーション用のデモ プロジェクトを作成しましょう。 コマンドに従って、Django プロジェクトとそのプロジェクト内のアプリを作成します。
django-admin startproject django_project
python manage.py startapp blog
この新しく作成された Django プロジェクトを利用可能なテキスト エディターで開きましょう。
最初にアップロードしたファイル用のフォルダーを作成するので、settings.py
を開きましょう。 INSTALLED_APPS
リストを見つけて、アプリ名を項目として渡します。
INSTALLED_APPS = [
"blog.apps.BlogConfig",
]
ここで、ファイルがアップロードされるフォルダーを作成する必要があります。 STATIC_URL
変数を見つけて、変数の下に次のコードを記述します。
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
ここで、MEDIA_URL
を '/media/'
に等しく設定し、MEDIA_ROOT
を設定する必要があります。これは、アップロードされたファイルが保存されるフォルダーの名前になります。
MEDIA_ROOT = os.path.join(BASE_DIR, "media_cdn")
次に、メディアと静的ルールを urls.py
に追加しましょう。 views.py
ファイルから取得する home
および download
関数のパスを定義しましょう。
また、ダウンロード ファイルの URL を設定します。
url
オブジェクトは非推奨のため使用できません。 この代わりに、re_path
オブジェクトを簡単に使用できます。
re_path(r"^download/(?P<path>.*)$", serve, {"document_root": settings.MEDIA_ROOT})
私たちの場合、このコードを使用しています。
models.py
ファイル内にモデルを作成しましょう。このモデルには 2つのフィールドがあります。 最初のフィールドは FileField
で、2 番目のフィールドは CharField
です。
また、ページのタイトルを返す文字列 dunder メソッドを作成する必要があります。
admin.py
ファイルに FilesAdmin
モデルを登録する必要があります。
from .models import FilesAdmin
admin.site.register(FilesAdmin)
ブログ フォルダー内のブログ テンプレート内に home.html
ファイルを作成します。 home.html
ファイルの body タグの間に次のコードを追加しましょう。
{% for post in file %}
<h2>{{post.title}}</h2>
<a href="{{post.adminupload.url}}" download="{{post.adminupload.url}}">Download</a>
{% endfor %}
home
関数で FilesAdmin
モデルからすべてのオブジェクトを取得します。 次に、コンテキストを home.html
ファイルに渡し、このページをレンダリングします。
views.py
ファイルで home
関数と download
関数を定義する必要があります。 download
関数で、デフォルトでファイルがダウンロードされるパスを取得します。
次の行で、ディレクトリが存在するかどうかを確認します。 次に、読み取りバイナリ モードでファイルを開き、HTTP 応答で返します。
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
次に、これらのコマンドを実行して移行を行う必要があります。
python manage.py makemigrations
python manage.py migrate
スーパーユーザーを作成します。
python manage.py createsuperuser
Django サーバーを実行して、管理パネルから mp3 ファイルをアップロードしてみましょう。
ホームページを開いて、ダウンロードできるか見てみましょう。
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