Ошибка 404 (Not Found) при POST-запросе на http://localhost/upload-avatar/ и SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
При попытке отправить POST-запрос на http://localhost/upload-avatar/ получаю ошибку POST http://localhost/upload-avatar/ 404 (Not Found)
, а также возникает ошибка SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON
. Также, если я напрямую перейду поссылке http://localhost/upload-avatar/, то мне выдает ошибку
Not Found
The requested URL was not found on this server.
Хотелось бы разобраться, в чем причина и как исправить данную проблему. Есть подозрения, что проблема в Apache. Я использую Wamp. Django я подключал уже после некоторого времени использования и написания кода на wamp. Apache я настраивал.Также проверял настройки маршрутизации и запуск сервера, но проблема остается. Прошу помощи в выявлении и устранении данной проблемы. Мучаюсь уже четвертые сутки.
Заранее благодарю!
Код:
JS:
window.onload = function() {
const PhotoUpload = document.getElementById('PhotoUpload');
const photo = document.getElementById('photo');
PhotoUpload.addEventListener('change', function() {
const file = this.files[0];
if (file) {
const reader = new FileReader();
reader.addEventListener('load', function() {
photo.setAttribute('src', this.result);
photo.classList.remove('alt-centered');
PhotoUpload.style.display = 'none'; // скрываем кнопку
// Отправляем AJAX-запрос на загрузку аватара
const formData = new FormData();
formData.append('photo', file);
fetch('/upload-avatar/', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
console.log(data); // Результат ответа от сервера
})
.catch(error => {
console.error('Произошла ошибка:', error);
});
});
reader.readAsDataURL(file);
} else {
photo.setAttribute('src', '#');
photo.classList.add('alt-centered');
PhotoUpload.style.display = 'block'; // показываем кнопку
}
});
};
views.py
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.core.files.storage import default_storage
from django.http import JsonResponse
# Create your views here.
@csrf_exempt
def upload_avatar(request):
if request.method == 'POST' and request.FILES.get('photo'):
photo = request.FILES['photo']
# Сохраните фотографию с помощью default_storage
filename = default_storage.save('photos/' + photo.name, photo)
return JsonResponse({'message': f'Фотография успешно загружена: {filename}'})
return JsonResponse({'error': 'Произошла ошибка при загрузке фотографии.'})
urls.py
from django.contrib import admin
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from PhotoSave import views
urlpatterns = [
path('admin/', admin.site.urls),
path('upload-avatar/', views.upload_avatar, name='upload_avatar'),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
В файле Apache (httpd.conf) я менял только:
<Directory "${SRVROOT}/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<Directory "${INSTALL_DIR}/www/Chat/MediaSave">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
а также добавил строку LoadModule wsgi_module modules/mod_wsgi.so