diff --git a/beesgospel/views.py b/beesgospel/views.py index fc7619f..3186763 100644 --- a/beesgospel/views.py +++ b/beesgospel/views.py @@ -1,9 +1,12 @@ from datetime import date, timedelta + +from django.conf import settings from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin +from django.http import HttpResponse from django.urls import reverse_lazy from django.views.generic import ( - CreateView, DeleteView, ListView, TemplateView, UpdateView + CreateView, DeleteView, ListView, TemplateView, UpdateView, View ) from .forms import ChantEditForm, MembreEditForm @@ -27,6 +30,22 @@ class ManifestView(TemplateView): content_type = "application/json" +class MediaServeView(LoginRequiredMixin, View): + subdir = "" + + def get(self, request, *args, **kwargs): + if request.get_host() == "localhost:8000": + from django.views.static import serve + + return serve(request, f"{self.subdir}/{kwargs['path']}", document_root=settings.MEDIA_ROOT) + filepath = settings.MEDIA_ROOT / self.subdir / kwargs["path"] + return HttpResponse(headers={ + "Content-Type": "application/force-download", + "Content-Disposition": f'attachment; filename="{filepath.name}"', + "X-Sendfile": str(filepath).encode("utf-8"), + }) + + class PresentationView(TemplateView): template_name="presentation.html" diff --git a/common/urls.py b/common/urls.py index c6a9fbf..4ab16eb 100644 --- a/common/urls.py +++ b/common/urls.py @@ -27,4 +27,6 @@ urlpatterns = [ path("membres/chants//edit/", views.ChantEditView.as_view(), name="chant-edit"), path("membres/chants//delete/", views.ChantDeleteView.as_view(), name="chant-delete"), path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"), + + path("media/chants/", views.MediaServeView.as_view(subdir="chants")), ]