Django ダウンロード ファイル

Salman Mehmood 2024年2月15日
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})

私たちの場合、このコードを使用しています。

Django でのファイルのアップロードとダウンロード

models.py ファイル内にモデルを作成しましょう。このモデルには 2つのフィールドがあります。 最初のフィールドは FileField で、2 番目のフィールドは CharField です。

また、ページのタイトルを返す文字列 dunder メソッドを作成する必要があります。

Django 2 でのファイルのアップロードとダウンロード

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 ファイルをアップロードしてみましょう。

Django に MP3 ファイルをアップロード

ホームページを開いて、ダウンロードできるか見てみましょう。

Django でファイルをダウンロード

著者: Salman Mehmood
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