【Django】ファイルアップロード機能を実装する

 

こんにちは。のっくんです。

 

今日の記事では、Djangoのファイルアップロード機能を実装する方法を紹介します。

 

「Djangoでファイルアップロードページを作りたい」

 

そんな方に読んでいただければと思います。

 

スポンサーリンク

 

完成形

 

作成するページの見た目は以下のようなシンプルなものです。

 

 

Descriptionにアップロードするファイル名、Documentにアップするファイルを指定します。

 

Uploadボタンを押すと、アップロードされます。

 

アプリケーションの作成

 

以下のコマンドでmosaic_appと言う名前のプロジェクトを作成して、その中にhelloと言う名前のアプリケーションを作成します。

 

 

このhelloアプリケーションにファイルのアップロード機能を実装します。

 

 

画像のアップロード先はmedia/documentsディレクトリにしたいと思います。

 

プロジェクト全体の設定とURL

 

画像をアップロードするディレクトリを指定します。

 

settings.pyの下の方に以下を追加しましょう。

 

mosaic_app/settings.py

 

また、タイムゾーンを日本にしておきます。

 

 

URLの設定は以下のようにしておきます。

 

mosaic_app/urls.py

 

hello/urls.py

 

モデルの作成

 

では早速モデルを作っていきましょう。helloアプリの中にあるmodels.pyを以下のようにします。

 

hello/models.py

 

documentがFileFiledで定義されています。ここでファイルのアップロード先を(documents/)にしています。この設定によってmedia/documentsに画像がアップロードされるようになります。

 

DateTimeFieldを定義して投稿日時が分かるようにしています。auto_now_addを指定することで自動的に投稿日時がデータベースに書き込まれるようになります。

 

フォームの作成

 

このファイルは存在しないので自分で新しく作成します。

 

hello/forms.py

 

fieldsのなかに投稿日時はありませんが、システムで自動的に追加されるようにしてあるのでユーザが指定する必要はありません。

 

ビューの編集

 

ビューでは以下の関数を作ります。

 

hello/views.py

 

model_form_uploadでは、投稿されたファイルの保存やフォームの受け渡しを行なっています。投稿ページはmodel_form_upload.htmlにしています。

 

テンプレートの作成

 

以下のようにテンプレートを作成します。

 

hello/templates/hello/model_form_upload.html

 

enctypeを指定しないと上手くアップロードできないそうなので気をつけてください。

 

以上のコードを記載したら、以下のコマンドを実行してください。

 

 

ブラウザで”localhost:8000/hello/upload”にアクセスするとページが表示されます。

 

アップされたファイルを確認する方法

 

*2019/1/7 追記

 

これは必須ではありませんが、以下のようにするとアップされたファイル名や日時を確認できます。

 

hello/views.py

 

hello/templates/hello/model_form_upload.html

 

参考URL

How to Upload Files With Django:

https://simpleisbetterthancomplex.com/tutorial/2016/08/01/how-to-upload-files-with-django.html

 

以上です。お疲れ様でした。

ABOUTこの記事をかいた人

のっくん

理系院卒で大企業の研究所に就職。 趣味はプログラミング、レアジョブ英会話、筋トレ、旅行。 Twitter:@yamagablog