【django】ImageFieldの使い方【開発環境編】
当ページのリンクには広告が含まれています。
django
での画像ファイルの扱い方は他のフィールドと異なるため初見では分かりづらい部分があります。
今回は、開発環境でメディアファイルを扱えるようにする方法をご紹介いたします。
この記事におすすめの人
- django初心者
- models.pyにImageFieldを追加したい
Django/DjangoRESTframeworkについて記事まとめ
目次
mediaディレクトリの追加
画像ファイルアップロード用のディレクトリを作成します。djangoのルートディレクトリに配置します。
$ mkdir media
models.pyの記述
models.py
にImageField
を含んだモデルを作成していきます。
upload_to
で、画像ファイルの保存先が指定できます。
from django.db import models
class Image(models.Model):
name = models.CharField(max_length=255, unique=True)
image = models.ImageField(upload_to='images/')
def __str__(self):
return self.name
また、upload_to
に直接パスを指定するのではなく、関数を呼び出して任意の処理に変えることもできます。
django:upload_toについて
https://docs.djangoproject.com/en/3.2/ref/models/fields/#django.db.models.FileField.upload_to
def directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class Image(models.Model):
name = models.CharField(max_length=255, unique=True)
image = models.ImageField(upload_to=directory_path)
settings.pyの編集
settings.py
にメディアディレクトリの場所を書きます。
開発環境
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
画像配信のために、urls.py
に下記も記述します。開発環境では記載しないとエラーになります。
from django.contrib import admin
from django.urls import path, include
# 追記
from . import settings
from django.contrib.staticfiles.urls import static, staticfiles_urlpatterns
urlpatterns = [
・・・
]
# 追記
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
サーバーから直接配信
S3
やGCS
から配信する場合は異なりますが、デプロイしたサーバー上から配信する場合にはデプロイ時にMEDIA_ROOT
を書き換える必要があります。
nginx
から画像ファイルを配信する場合には、下記のように設定しています。
MEDIA_ROOT = '/usr/share/nginx/html/media'
Pillowのインストールとマイグレーション
画像ファイルの扱うライブラリPillow
をインストールします。
$ pip install pillow
データベースへ変更を伝えるためマイグレーションします。
$ python manage.py makemigrations
$ python manage.py migrate
テストで管理画面からアップロード出来たら成功です。
参考記事
- Model field reference | Django documentation | Django
- [Django] ファイルアップロード機能の使い方 [基本設定編] – Qiita
- DjangoのImageField・DBによる画像保存について – ひさふぃの日記
Django学習におすすめの教材
【徹底的に解説!】Djangoの基礎をマスターして、3つのアプリを作ろう!(Django2版 / 3版を同時公開中です)
Djangoの概要から学び、3つのアプリを作る中でフレームワークに対する理解を深めることができます。最後はVPSを使ってウェブサイトを公開していきましょう!Djangoだけではなく、フレームワークをこれから学びたい方にもおススメです。
【Python 3 x Django 2.0】作りながら覚えるDjango
初心者でも安心!DjangoとPython ( Python 3 )を使ったウェブサイト構築の基本を最初の一歩からデプロイまでをステップバイステップで解説。自分のアイディアを世界に発信しよう!
【Python】 Django3で「本当に使える」WEBアプリケーションを開発しよう
GAEへデプロイやCloudSQL、GCSとも連携でき、登録・ログイン機能はもちろん、決済機能、フォーム送信のreCAPTCHA実装もできます。そのほかキャッシュやサイトマップ、マテリアルデザインにも触れ、多数の機能を実装します。
リンク
リンク
リンク
コメント