Djangoでのファイルのアップロードとダウンロードの実装方法は何ですか?

Djangoでは、FileFieldを使用してファイルのアップロードとダウンロードを行うことができます。

ファイルのアップロード手順は以下の通りです。

  1. ファイルフィールド
from django.db import models

class MyModel(models.Model):
    file = models.FileField(upload_to='uploads/')
  1. ファイルフィールド
from django import forms

class MyForm(forms.Form):
    file = forms.FileField()
  1. アップロードファイルのロジックをビューで取り扱います。
from django.shortcuts import render, redirect
from .forms import MyForm

def upload(request):
    if request.method == 'POST':
        form = MyForm(request.POST, request.FILES)
        if form.is_valid():
            my_model = MyModel(file=request.FILES['file'])
            my_model.save()
            return redirect('success')
    else:
        form = MyForm()
    return render(request, 'upload.html', {'form': form})
  1. アップロード.html
<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Upload</button>
</form>

ファイルのダウンロード手順は次のとおりです:

  1. モデル内に、ダウンロード可能なファイルのURLを生成するメソッドを定義する。
from django.db import models
from django.urls import reverse

class MyModel(models.Model):
    file = models.FileField(upload_to='uploads/')

    def get_download_url(self):
        return reverse('download', args=[str(self.id)])
  1. ファイルのダウンロード処理をビューで行う。
from django.http import FileResponse
from .models import MyModel

def download(request, pk):
    my_model = MyModel.objects.get(pk=pk)
    file_path = my_model.file.path
    return FileResponse(open(file_path, 'rb'))
  1. urls.pyでファイルのダウンロード用のURLを定義します。
from django.urls import path
from .views import upload, download

urlpatterns = [
    path('upload/', upload, name='upload'),
    path('download/<int:pk>/', download, name='download'),
]
  1. ダウンロードページ
<a href="{{ my_model.get_download_url }}">Download</a>
bannerAds