Ajax не получает данные из представления Django
У меня есть страница, на которой пользователь должен ввести URL видео на YouTube. Этот URL отправляется с помощью Ajax в представление Django, которое проверяет URL, чтобы увидеть, является ли он действительным или нет. Затем он оповещает либо сообщением об ошибке, если он не действителен, либо заголовком видео, если он действителен. Оповещения выполняются с помощью стандартных оповещений javascript. Это просто тестовая версия страницы. Я планирую отображать информацию, собранную с видео, на самой странице.
Это шаблон для страницы.
<body>
<form method="post">
{% csrf_token %}
<input type="text" name="url" id="url">
<label for="url">Please Enter Video URL Below</label>
<button id='button'></button>
<p id = 'test'></p>
</form>
<script src="https://code.jquery.com/jquery-3.1.0.min.js"></script>
<script type="text/javascript"> window.CSRF_TOKEN = "{{ csrf_token }}"; </script>
<script>
document.getElementById('button').addEventListener('click', find_video, false)
function find_video(){
var url = document.getElementById('url').value;
$.ajax({
url: "ajax/find_video/",
type: "POST",
data: {
csrfmiddlewaretoken: window.CSRF_TOKEN,
url : url},
dataType: 'json',
complete: function(data){
if (data.error_message){
alert('Please enter valid url')
} else {
alert(data.video_title)
}
},
});
}
</script>
</body>
</html>
Это представление Django
def find_video(request):
url = request.POST.get('url')
#unquotes url formating so youtube_dl can use it.
urllib.parse.unquote(url)
if is_valid(url):
error_message = False
else:
error_message = True
data = {
'error_message' : error_message
}
return JsonResponse(data)
opts = {}
with youtube_dl.YoutubeDL(opts) as ydl:
video_info = ydl.extract_info(url, download=False)
video_title = video_info['title']
print(video_title)
return JsonResponse({'video_url' : url,'video_title': video_title})
def is_valid(url):
#function to verify URL is valid
extractors = youtube_dl.gen_extractors()
for e in extractors:
if e.suitable(url) and e.IE_NAME != 'generic':
return True
return False
Само представление, похоже, работает, поскольку печатает правильное название видео. Однако, независимо от того, что я ввожу в поле ввода, на странице ничего не происходит. Однако, когда я ввожу правильный URL, сценарий просмотра запускается и получает информацию из видео. Но на странице по-прежнему нет никаких предупреждений.
Вывод консоли Django
Django version 4.0.1, using settings 'portfolio.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[07/Feb/2022 10:17:23] "POST /ydl/ HTTP/1.1" 200 1471
[youtube] 3oAl6A1j4-g: Downloading webpage
[youtube] 3oAl6A1j4-g: Downloading MPD manifest
Replacing the graphics card on your system
[07/Feb/2022 10:17:25] "POST /ydl/ajax/find_video/ HTTP/1.1" 200 106
Любая помощь будет высоко оценена.