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

Django REST Framework接口404报错:/api/posts路径无法访问

问题分析与解决

核心问题:URL路径不匹配

你桌面端请求的是http://127.0.0.1:8000/api/posts,但后端urls.py中通过router.register(r'posts', PostViewSet)注册的接口路径是根路径下的/posts/(DefaultRouter会自动添加尾斜杠),并不存在/api/posts这个路径,所以返回404。

解决方案:统一API路径前缀

有两种方式修复:

方式1:修改后端URL配置(推荐)

给所有DRF接口加上api/前缀,修改urls.py:

from django.urls import path, include
from .views import ThreadListView, ThreadDetailView, CreateThreadView, CreatePostView, PostViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'posts', PostViewSet)

urlpatterns = [
    path('', ThreadListView.as_view(), name='thread_list'),
    path('thread/<int:pk>/', ThreadDetailView.as_view(), name='thread_detail'),
    path('thread/create/', CreateThreadView.as_view(), name='create_thread'),
    path('thread/<int:pk>/post/', CreatePostView.as_view(), name='create_post'),
    path('accounts/', include('accounts.urls')),
    # 把router的接口包含在api/前缀下
    path('api/', include(router.urls)),
]

# 移除原来的 urlpatterns += router.urls

这样你的PostViewSet接口路径就变成了http://127.0.0.1:8000/api/posts/(注意尾斜杠,DefaultRouter默认要求)。

方式2:修改桌面端请求URL

如果不想改后端,直接把桌面端api.py里的URL改成:

url = "http://127.0.0.1:8000/posts/"

其他潜在问题提醒

  1. 认证与权限:ModelViewSet默认使用IsAuthenticated权限类,桌面端请求如果没有携带用户认证信息(比如token),即使路径正确,也会返回403禁止访问。可以暂时在PostViewSet中添加权限配置允许匿名创建(仅测试用,上线要改):
from rest_framework.permissions import AllowAny

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all() 
    serializer_class = PostSerializer
    permission_classes = [AllowAny]  # 添加这一行

正式环境建议使用Token认证,桌面端请求时在headers中携带Authorization: Token <你的token>。

  1. 请求尾斜杠:Django默认APPEND_SLASH = True,如果请求URL不带尾斜杠,会自动重定向,但requests.post默认不会跟随重定向,所以确保请求URL带尾斜杠(比如/api/posts/)。

  2. 数据验证:确保你发送的thread和authorID在数据库中真实存在,否则DRF会返回400错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:01:19