You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django控制台报API未找到错误,但浏览器可正常访问该API

问题

我搭建了一个Django后端,项目包含三个主要目录:base(存放模型的应用)、api(含views.py和urls.py的API应用)、backend(Django核心文件夹,含settings.py、wsgi.py等)。已有多个API正常运行,新增的/api/getmodel/API按相同步骤配置,但前端请求时Django控制台报错:

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/时,能看到Django REST Framework的默认视图,说明该API路径存在。

api目录下的urls.py配置:

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代码:

# 无法正常工作的API
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def fetch_model(request):
    try:
        human_model = HumanModel.objects.get(user=request.user)
        if human_model.model_path:
            return Response({'model_path': human_model.model_path})
        else:
            return Response({'message': 'No model path exists for the current user.'})
    except HumanModel.DoesNotExist:
        return Response({'message': 'No model information found for the current user.'}, status=404)

backend核心目录下的urls.py已正确关联api路由,其他API均可正常使用。前端React项目已配置正确代理,其他API请求正常,前端Axios请求代码:

useEffect(() => {
    const fetchModelPath = async () => {
      if (!authTokens) return;
      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]); 

请问该API出现404错误的原因是什么?

分析与解决方案

从给出的信息来看,浏览器能直接访问但前端请求报404,大概率是请求路径差异或认证问题导致的路由匹配异常,具体排查方向如下:

  • 检查前端实际请求路径:打开浏览器开发者工具的Network面板,查看前端发送的真实请求URL,确认是否和预期的/api/getmodel/一致。重点排查代理配置是否给路径加了额外前缀,或者代码中路径拼写有误(比如多/少斜杠)。
  • 排查认证导致的"伪404":该API加了IsAuthenticated权限验证,若前端的authTokens.access无效、过期或格式错误(比如Bearer后缺少空格),Django可能返回401,但部分场景下会被处理为404。可以临时注释@permission_classes([IsAuthenticated]),再用前端请求测试:如果请求正常,就说明是token的问题;同时查看Network面板的响应状态码,确认真实状态是404还是401。
  • 重启Django服务器:开发模式下修改路由后,可能存在缓存未更新的情况,重启服务器确保新路由生效,同时再次确认backend/urls.py中是否正确包含api路由(比如path('api/', include('api.urls')))。
  • 检查中间件顺序:确认Django的settings.py中,django.contrib.auth.middleware.AuthenticationMiddleware存在且位置正确,认证相关中间件需要在路由匹配前执行,否则可能影响权限验证和路由匹配逻辑。

内容的提问来源于stack exchange,提问作者mayank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:50:01