import os from rest_framework import permissions, viewsets, generics from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, HttpResponseRedirect from PyRSS2Gen import RSS2, RSSItem, Guid from . import models, serializers, forms, utils from cp_video.pagination import LimitPagination class VideoAPIView(viewsets.ModelViewSet): model = models.Video serializer_class = serializers.VideoSerializer permission_classes = [permissions.AllowAny] pagination_class = LimitPagination default_limit = 20 def get_queryset(self): queryset = self.model.objects.filter(s3_file__isnull=False) return queryset class PlaylistRetrieveAPIView(generics.RetrieveAPIView): queryset = models.Playlist.objects.all() serializer_class = serializers.PlaylistSerializer permission_classes = [permissions.AllowAny] lookup_field = 'pk' def playlist_mrss_view(request, pk): mrss_items = [] playlist = get_object_or_404(models.Playlist, pk=pk) for playlist_video in playlist.playlist_video.all(): video = playlist_video.video item = RSSItem( title=video.title, link='link', description=video.description, guid=Guid('http://example.com/item1'), pubDate=video.created, ) mrss_items.append(item) rss = RSS2( title=playlist.title, link='http://example.com/mrss', description=playlist.description, items=mrss_items, ) # Возвращаем mRSS-канал как HTTP-ответ response = HttpResponse(content_type='application/rss+xml') rss.write_xml(response) return response def upload_file(request): if request.method == 'POST': form = forms.UploadFileForm(request.POST, request.FILES) if form.is_valid(): video_file = request.FILES['local_file'] video_name = video_file.name utils.handle_uploaded_file(video_file, video_name) form.save() new_video_id = models.Video.objects.last().id redirect_url = f'{request.META["HTTP_ORIGIN"]}/admin/core/video/{new_video_id}/' os.remove(video_name) return HttpResponseRedirect(redirect_url) return redirect(request.META['HTTP_REFERER'])