Django でメディアをアップロードする
このデモ記事では、メディア ファイルについて簡単に紹介し、Django プロジェクトでメディア ファイルを操作する方法についても説明します。
Django で MEDIA_ROOT
と MEDIA_URL
を使用してメディアをアップロードする
デフォルトでは、Django はローカル ファイル システム内のファイルを処理する標準的な方法を備えています。
Django プロジェクトの設定を見たことがあるなら、おそらく MEDIA_ROOT
と MEDIA_URL
を見たことがあるでしょうし、別のプロジェクトでは、おそらく MEDIA_URL
上のファイルにアクセスできる場所を見たことがあるでしょう。
それでは、Django プロジェクトで設定する方法について説明します。
たとえば、Demo プロジェクトがあり、その中にドキュメント アプリがあります。 内部のモデルを見ると、title
フィールドと file
フィールドを持つドキュメント モデルが表示されます。
file
フィールドには、ドキュメントに等しい upload_to
キーワード引数があります。これは、ファイルがアップロードされる場所を意味します。 このオブジェクトのすべてのファイルをドキュメントのサブフォルダーに配置します。
コード:
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)
したがって、構成を開始するために最初に必要なことは、settings.pys
を開くことです。
設定のトップにいる場合は、ベースまたは定数が表示されます。 これでプロジェクトのルートに到達し、ベース パスを設定できるようになります。
コード:
BASE_DIR = Path(__file__).resolve().parent.parent
setting.py
ファイルの最後にジャンプすると、MEDIA_ROOT
から開始し、os.path.join
を設定します。 次に、BASE_DIR
をメディアとして結合します。つまり、プロジェクトでメディア フォルダーを定義し、そこにすべてのファイルをアップロードします。
次に、MEDIA_URL
を設定して、Django が適切に URL を構築できるようにします。 これは、ユーザーがアップロードしたコンテンツにアクセスするために、ドメイン名の最後にメディアが最初に表示されることも意味します。
コード:
# Manage media
import os
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"
次にセットアップする必要があるのは、urls.py
ファイルを使用して、ローカル マシンでこれらを適切に表示するための URL ルーティングです。 そのため、urls.py
を開き、static()
メソッドを呼び出し、MEDIA_URL
と MEDIA_ROOT
の設定を使用する必要があります。
静的ファイルが必要です。 次に、urls.py
ファイルは、ローカルで取得する適切な URL を作成する場所を認識します。
static
メソッドは URL を正しく生成します。 この static
メソッドの興味深い点は、ローカルでのみ機能し、本番環境では機能しないため、設定をインポートする必要があります。
つまり、実稼働環境でデバッグを False
に設定すると、これは機能しません。 メディア フォルダーを適切に提供するには、使用している Web サーバーを適切に構成する必要があります。
コード:
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)
最後に、プロジェクトのルートにメディア フォルダーを作成し、メディア フォルダー内にドキュメント フォルダーを作成します。
Django 管理パネルに移動して新しい画像をアップロードしようとすると、ファイルをアップロードできます。 アップロード後、ドキュメント フォルダ内のこの画像を見ると、適切にアップロードされていることがわかります。
これで、メディア ルートでメディア URL を構成するための適切な紹介ができました。 ユーザーがファイルをシステムにアップロードすると、バックエンドはファイルをどこに置き、どこからプルするかを認識します。
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