В общем мой ментор дал такое задание мне:
"Сделать аналог
www.youtube-mp3.org. Забираем с помощью youtube-dl ссылку на видео и редиректим пользователя по этой ссылке. Ему предложится сохранить файл. Сохранять историю запросов. Код опубликовать на github
Теория: HTTP(0.9,1.0,1.1,2)
Методы
Статус коды"
Все получилось сделать как надо, единственное ментор хочет, чтобы происходил редирект в view, а у меня он происходит в аяксе. Но я не понимаю как это сделать, ментор только и делает, что скидывает эту ссылку
https://en.wikipedia.org/wiki/HTTP_301 и говорить читать
HTML
<div class="input-field col s12 ">
<input id="input_text" type="text" name="" value="">
<label for="input_text" id="label_text">Input link of video</label>
</div>
AJAX:
$(document).ready(function() {
$("#click_button").click(function(){
var url_value = $("#input_text").val(); // Получаем URL с инпута идентификатор input_text
var regExp = /^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
var match = url_value.match(regExp); // Прогоняем наше URL через регулярное выражение
if (match) { // Если URL прошла валидацию
if (confirm('Хотите скачать данное видео? ' + url_value)) { // Спрашиваем пользвателя не хочет скачать ли он скачать видео
$.ajax({ // Отправляем это АЯКС запросом
url: '/app/results/', // На какой URL отправлять нам запрос
type: 'GET', // Метод запроса
data: {
'url': url_value // Что отправлять
},
dataType: "text" // Тип того что мы отправляем
});
window.location = url_value; // Редирект пользователя по URL которую он ввел
}
} else {
alert('Не правильный адрес ссылки!'); // Если пользователь не прошел валидацию то выводим окно с сообщением
}
});
});
VIEW:
def download_video(request):
if request.is_ajax(): # Проверяем был ли AJAX запрос
get_request = request.GET['url'] # Ловим url который передали аяксом
response = HttpResponse()
response.set_cookie('url', get_request) # Устанавливаем куку для каждого запроса
url = Link(url=get_request) # Добавляем наш url в поле url
url.save() # Сохраняем нашу модель
ydl_opts = { # Опции библиотеки youtube_dl
'outtmpl': MEDIA_ROOT+'/'+'%(title)s.%(ext)s', # Путь куда скачивается видео
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([get_request]) # Скачиваем видео
return response
else:
return render(request, 'app/index.html') # Если AJAX запрос не пришел выводим страницу index.html