Django : преобразование представления загрузки функции в представление класса
Я пытаюсь переписать функциональное представление, которое загружает файлы, в представление класса. Однако я не понимаю, как сделать это правильно, используя нужные методы, поскольку у меня есть аргумент из url. Затем я не знаю, какой из классов представления я должен использовать.
Я сделал попытку, которая работает, но я не понимаю, почему она работает с методом get. Кто-нибудь может объяснить мне?
Вот мое представление функции, которое работает:
Функция views.py
def download(request, fileUUID):
file = Documents.objects.get(Uuid=fileUUID)
filename = file.Filename
file_type, _ = mimetypes.guess_type(filename)
url = file.Url
blob_name = url.split("/")[-1]
blob_content = AzureBlob().download_from_blob(blob_name=blob_name)
if blob_content:
response = HttpResponse(blob_content.readall(), content_type=file_type)
response['Content-Disposition'] = f'attachment; filename={filename}'
messages.success(request, f"{filename} was successfully downloaded")
return response
return Http404
urls.py
from django.urls import path
from upload.views import *
urlpatterns = [
path('upload/', DocumentUpload.as_view(), name="upload"),
path('download/<str:fileUUID>/', DocumentDownload.as_view(), name="download"),
]
html
<a href="{% url 'download' file.Uuid %}">
<i class='bx bxs-download'></i>
</a>
Путь для download
представления на основе класса:
path('download/<str:fileUUID>/',views.DownloadView.as_view())
Вид из View
:
class DownloadView(View):
def get(self, request, *args, **kwargs):
file = UploadFilesBlobStorage.objects.get(Uuid=self.kwargs['fileUUID'])
filename = file.Filename
file_type, _ = mimetypes.guess_type(filename)
url = file.Url
blob_name = url.split("/")[-1]
blob_content = download_from_blob(blob_name)
if blob_content:
response = HttpResponse(blob_content.readall(), content_type=file_type)
response['Content-Disposition'] = f'attachment; filename={filename}'
messages.success(request, f"{filename} was successfully downloaded")
return response
return Http404