Answer the question
In order to leave comments, you need to log in
How to redirect via AJAX in a view?
In general, my mentor gave me the following task:
"Make an analogue of www.youtube-mp3.org . We use youtube-dl to take the link to the video and redirect the user to this link. He will be prompted to save the file. Save the request history. Publish the code on github
Theory : HTTP(0.9,1.0,1.1,2)
Methods
Status code"
Everything turned out to be done as it should, the only thing the mentor wants is for a redirect to occur in the view, but for me it happens in ajax. But I do not understand how to do this, the only thing the mentor does is drop this link https://en.wikipedia.org/wiki/HTTP_301 and say read
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>
$(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('Не правильный адрес ссылки!'); // Если пользователь не прошел валидацию то выводим окно с сообщением
}
});
});
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
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question