Консоль Django выдает ошибку not found для api, хотя он виден в браузере

У меня есть настройка бэкенда на django. В ней у меня есть несколько папок: base (приложение, в котором хранятся мои модели), папка api, в которой есть views.py и urls.py для моих apis, и папка backend (базовая папка djangos, в которой находятся settings.py, wsgi.py и т.д.).

Теперь, у меня уже есть несколько API в моем views.py (в папке api), которые связаны и работают, и я только что попытался создать новый. Хотя я проделал те же шаги, выполнил ту же привязку, этот API не работает при обращении к нему из фронтенда, в консоли написано:

Not Found: /api/getmodel/
\[25/Mar/2024 22:36:50\] "GET /api/getmodel/ HTTP/1.1" 404 3116"

Когда я перехожу по ссылке http://127.0.0.1:8000/api/getmodel/, я вижу стандартное представление djangorestframework, поэтому я знаю, что представление существует и по этой ссылке действительно что-то есть. Вот соответствующие файлы:

urls.py (в папке api):

from django.urls import path
from . import  views
from rest_framework_simplejwt.views import (
    TokenRefreshView,
)
from .views import MyTokenObtainPairView

urlpatterns = [
    path('registeruser/', views.register_user),
    path('token/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('createmodel/', views.create_model),
    path('getmodel/', views.fetch_model),
]

views.py (в папке api):

from rest_framework.response import Response
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from django.contrib.auth.hashers import make_password
from base.models import User, HumanModel
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
from django.http import JsonResponse
import subprocess
import os


#login tokenizer (working fine)

#login api here (working fine)

#example of working API
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def create_model(request):
    data = request.data
    username = request.user.username
    print(username)
    print(data)
    
    #do a whole bunch of processing (left out for simplicity)

#api that is NOT working (saying not found)
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def fetch_model(request):
    try:
        # Attempt to fetch the HumanModel instance associated with the current user
        human_model = HumanModel.objects.get(user=request.user)
        # Check if a model_path exists
        if human_model.model_path:
            # Return the model_path if it exists
            return Response({'model_path': human_model.model_path})
        else:
            # Return a message indicating the model_path is not available
            return Response({'message': 'No model path exists for the current user.'})
    except HumanModel.DoesNotExist:
        # Return a response indicating no HumanModel instance exists for the current user
        return Response({'message': 'No model information found for the current user.'}, status=404)

У меня уже есть urls.py в папке базового бэкенда, который работает правильно, и он работает с другими моими apis, поэтому я не могу понять, в чем проблема. Вот файл для справки:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", include('api.urls'))
]

Я не думаю, что это проблема конфигурации в привязке моей папки api к urls.py в папке backend, так как другие api (login, register, createmodel) все работают. И опять же, я могу перейти по адресу http://127.0.0.1:8000/api/getmodel/ и увидеть стандартное представление djangorestframework, но когда мой фронтенд-код пытается с помощью axios перейти по этому url, в консоли DJANGO появляется сообщение "не найдено". Есть идеи?

Смотрите выше для объяснения, даже если представление видно в браузере, оно говорит, что не найдено в консоли. Я правильно настроил прокси в моем react frontend в package.json, мои другие apis работают. Вот как я получаю данные из моего фронтенда:

useEffect(() => {
    const fetchModelPath = async () => {
      if (!authTokens) return; // If there are no auth tokens, return early
      try {
        const response = await axios.get('/api/getmodel/', {
          headers: {
            Authorization: `Bearer ${authTokens.access}`, 
          },
        });
        if (response.data.model_path) {
          setModelPath(response.data.model_path);
        } else {
          setModelPath("create");
        }
      } catch (error) {
        console.error("There was an error fetching the model path", error);
        setModelPath("create");
      }
    };

    fetchModelPath();
  }, [authTokens]); 

Ваш фронтенд может сначала попробовать HEADs запросы, прежде чем сделать Get запрос.

Проверьте свою конечную точку с помощью curl, postman или других инструментов разработки api. Если ваш бэкэнд отвечает 200, попробуйте добавить HEAD в декоратор @api_view.

@api_view(['HEAD', 'GET'])
@permission_classes([IsAuthenticated])
def fetch_model(request):
    # rest of your code
Вернуться на верх