Ошибка 404 (Not Found) при POST-запросе на http://localhost/upload-avatar/ и SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON

Рейтинг: 0Ответов: 0Опубликовано: 01.06.2023

При попытке отправить 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

Ответы

Ответов пока нет.