django画像アップロード機能を実装する方法

djangoで画像をアップロードする機能を紹介します。

あの有名なインスタグラムも実はdjangoで作られていたって知っていましたか?

このようなアップロード機能を利用しているのかもしれません。

こんな人向け

・画像アップロード機能を実装したい

・プロフィールの画像アップロードを実装したい

環境

・OS:Mac

・django 2.2

・python3.8

それでは順番に説明をしていきます。

画像アップロードの実装

画像処理ライブラリ(pillow)のインストール

画像処理を行うpillowと言うライブラリをインストールします。

ヒロヤンの場合はpipenvに環境を作っておりますのでこれでインストールします。

pipに直接入れたい人なら下記コマンドでインストールして下さい。

settingsに追記をする

通常のデータの取り扱いと違い、画像を扱わなければならないので画像の保存先を設定ファイルに追記する必要があります。

settings.py

上記の追記とは別にsettings.pyファイルの中段のやや上あたりに下記TEMPLATESというコードがあるかと思います。

このTEMPLATES変数内部にこちらのコードも忘れずに記入をします。

mediaディレクトリを作成

settingsに画像保存パスの指定ができたら実際に保存をするディレクトリを作成します。

場所は、上記のsettings.pyが含まれているディレクトリと同じ並びにmediaディレクトリと、その下にimagesディレクトリを作成します。

media/images/

urls.pyに画像に対するpathを追加

urls.pyにあるurlpattarnsのリストオブジェクトの最後に +staticで始まる1行を追加します。

データ定義

画像を保存するためのmodelsを定義します。

重要なのは、upload_toに画像のパスコードを記入することです。

ここではプロフィール画像ということで、UserProfileとモデル名を定義し、フィールドにavatorを設定します。

それではいつものようにマイグレーションファイルを作成。

そして流し込みます。

htmlにフォームタグ記載

アップロードするためのフォームタグを記載します。

sample.html

いつものformと違うのは必ず画像ファイルを扱う enctype=”multipart/form-data” をタグ内に記載をすることです。

formsを作成

ImageFieldの記入をします。

viewsを作成

実施に画像がアップロードされた時の処理を書きます。

最上段ではforms.pyとmodesl.pyからクラスを読み込むコードを書きます。

5行目に、request.POSTに加えてrequest.FILESの記載を忘れずに。

以上で完了です。

実際にアップロードを実行

それでは実際に画像をアップロードしてみます。

何もしていない状態

画像を選択した状態

画像を選択したらRegisterをクリックしてみます。

images/ディレクトリに画像が保存されました。


最後に

djangoで画像アップロード機能を無事作成できましたが、ただ作成しただけではセキュリティリスクが多々あります。

続きはこちらでも紹介していますので、興味のある方はトライしてみてください。

また、画像アップロードの際にリサイズやサニタイズ処理をかけたいことはありませんか?そちらのコードも以下リンク先で紹介しております。

スクールを利用して本格的に学ぶ

いかがでしたでしょうか?

10人中9人が挫折すると言われるプログラミングを、ヒロヤンも実はプログラミングスクールで学習をしてきたからで、結果、今はPythonエンジニアとして働いています。

挫折率が高いプログラミングこそお金を払ってメンターを付けて、道を見失わないように環境を構築する必要があるのではないでしょうか。

これはダイエットで自分一人では痩せられないけど、トレーナーを付けて否が応でもせざるを得ない環境を作ると一緒ですね。

ヒロヤンもプログラミング勉強開始直後はあれこれ悩みましたが、悩むよりも手っ取り早くスクールに登録した方が最短ルートで勉強できるのではないかと考え、結果挫折せずに今に至っています。

今なら無料でキャリアカウンセリングを行っているCodeCampのPythonコースのようなプログラミングスクールもありますのでこれを機会に是非カウンセリングだけでも受けてみてはいかがでしょうか?

CodeCampで無料のカウンセリング

上記リンク先から無料相談ができます。

またこちら(↓)ではPython専用のプログラミングスクールをまとめ紹介しています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です