single.php

Djangoでファイルをアップロードする手順

Python + Django でアプリケーションで表示されたページにファイルのアップロード機能を追加する手順を備忘録的に投稿します。

ファイルのアップロード機能

Webブラウザで動作するアプリケーションでアカウントのアバター画像などのファイルをサーバー上にアップロードする機能が求められます。

Djangoには、ファイル(画像)をアップロードするクラスが用意されているので、簡単にアプリケーションに追加することができます。

実装も短期間でできるので、簡単にアプリに追加することができます。

ファイルのアップロード機能を追加する手順

具体的にブラウザで選択された画像ファイルをサーバー内のフォルダーにコピーする機能は次の手順で進めます。(djangoプロジェクト[site01]アプリケーション[app01]が作成されてサインイン機能が追加されている前提です)

1. VSCodeを起動してプロジェクト[site01]フォルダー内の[settings.py]に次の設定を追加します。

import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

アップロードされたファイルが保存される先をプロジェクトフォルダー内の[media]フォルダーに設定します。

2. アプリケーション(app01)フォルダー内の[urls.py]を開き次のコードを追加します。

urlpatterns = [
    path('', views.index, name='index'),
    path('upload/', views.upload, name='upload'),
]

3. アプリケーション(app01)フォルダー内の[models.py]を開き次のコードを追加します。

class FileUpload(models.Model):
    files = models.FileField(upload_to = 'files')

4. アプリケーション(app01)フォルダー内の[form.py]を開き次のコードを追加します。

from .models import FileUpload

class UploadForm(forms.ModelForm):
    class Meta:
        model = FileUpload
        fields = ('files',)

5. アプリケーション(app01)フォルダー内の[views.py]を開き次のコードを追加します。

from .form import UploadForm
from .models import FileUpload

def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('index')
    else:
        form = UploadForm()
    return render(request, 'app01/upload.html', {'form':form})

6. アプリケーション(app01)フォルダー内の[templates\app01]フォルダーに新しく[upload.html]ファイルを追加して次のコードを追加します。

<html>
    <head>
        <title>アップロード</title>
    </head>
    <body>
        <h1>upload.html</h1>
        <form method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">アップロード</button>
          </form>
    </body>
</html>

7.[ターミナル]画面を開き次のコマンドを入力して実行します。

python manage.py makemigrations app01
python manage.py migrate

8.[ターミナル]画面に次のコマンドを入力してサーバーを起動します。

python manage.py runserver

9. ブラウザのURL画面に[http://localhost;8000/app01/upload/]と入力します。

表示された画面にはファイルを選択するフォームが追加されています。

10. アップロードするファイルを選択して[アップロード]ボタンをクリックします。

11. プロジェクト[site01]フォルダー内の[media]フォルダーにファイルがコピーされます。

まとめ

Djangoの[FileField]を使うことで、ブラウザで選択したファイルをサーバー上にアップロードする機能を追加することができます。テンプレートに追加するフォームとビューの操作を追加するだけなので、手軽にファイルのアップロードをアプリケーションに実装することが可能になります。

Python + Djangoのプロジェクトでファイルのアップロードする方法の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

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