Задача такая: В поле вводим ссылку на видео с ютуба,
youtube-dl вытаскивает с этой ссылки прямую ссылку на скачивание видео.
Перенаправляем пользователя по прямой ссылке на скачивание видео, нас должно перенаправить и спросить типа «Хотите скачать файл?».
Редирект получается сделать, но при редиректе браузер просто воспроизводит видео, а не качает его.
model.py
from django.db import models class Link(models.Model): url = models.URLField(verbose_name='Ссылка') created = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = 'Ссылка' verbose_name_plural = 'Ссылки' def __str__(self): return self.url
forms.py
from django import forms from .models import Link class LinkForm(forms.Form): url = forms.URLField(widget=forms.TextInput(attrs={ 'id': 'input_text', 'class': 'url', 'name': 'url', 'placeholder': 'Enter url video from youtube.com' })) class Meta: model = Link fields = "__all__"
views.py
import youtube_dl from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import render from django.http import HttpResponsePermanentRedirect from .forms import LinkForm from .models import Link def index(request): form = LinkForm() link_list = Link.objects.all() context = { 'form': form, 'links': link_list, } return render(request, 'youtube/index.html', context) def download_video(request): form = LinkForm(request.POST) if request.method == 'POST': if form.is_valid(): youtubeUrl = request.POST.get('url') # Получаем ссылку с формы url = Link(url=youtubeUrl) # Сохроняем запись в БД url.save() options = { # Настройки youtube_dl 'outtmpl': '%(title)s-%(id)s.%(ext)s', 'format': 'best' } with youtube_dl.YoutubeDL(options) as ydl: r = ydl.extract_info(youtubeUrl, download=False) # Вставляем нашу ссылку с ютуба videoUrl = r['url'] # Получаем прямую ссылку на скачивание видео print(videoUrl) name = 'test' response = HttpResponsePermanentRedirect(videoUrl) # Вставляем прямую ссылку на скачивание в редирект response['content_type'] = 'application/force-download' response['Content-Disposition'] = 'attachment; filename=%s' % name return response else: print('Form is not valid!')
urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), url(r'^results/$', views.download_video, name='download_video') ]
Анонимный пользователь Изменен статус публикации