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

添加IsAdminUser认证后员工列表API登录后出现404错误求助

问题分析与解决方案

核心原因:路由匹配顺序冲突

最可能的问题是你的自定义API路由admin/employee/与Django自带的Admin站点路由admin/发生了匹配冲突。Django的URL路由是按定义顺序匹配的,如果项目根urls.py中path('admin/', admin.site.urls)的定义在你的自定义路由之前,那么所有以admin/开头的请求都会先被Django Admin站点接管,而Admin站点中没有employee/这个路径,因此返回404错误。

你之前未添加权限时能正常访问,大概率是当时自定义路由的位置在Admin路由之前,或者路由前缀不是admin/。

解决方案

方案1:调整路由顺序

将自定义的admin/employee/路由放在Django Admin路由的前面,确保请求先匹配到你的API视图:

# 项目根 urls.py
from django.contrib import admin
from django.urls import path
from your_app.views import EmpListView

urlpatterns = [
    # 自定义路由放在前面
    path('admin/employee/', EmpListView.as_view(), name='emp-list'),
    # Django Admin路由放在后面
    path('admin/', admin.site.urls),
]

方案2:修改API路由前缀

避免使用admin/作为API的前缀,防止与Django Admin站点冲突,例如改成api/admin/employee/:

# 项目根 urls.py 或 app的 urls.py
urlpatterns = [
    path('api/admin/employee/', EmpListView.as_view(), name='emp-list'),
    path('admin/', admin.site.urls),
]

其他排查方向

如果以上方案无效,可以检查以下内容:

  • 确认登录的用户确实是is_staff=True的管理员用户(IsAdminUser权限要求用户满足该条件,否则应返回403而非404,但仍需验证)。
  • 检查APPEND_SLASH设置:如果settings.py中APPEND_SLASH = False,确保请求URL末尾带有斜杠/,否则会返回404。
  • 验证登录后的重定向路径:确认登录成功后是否正确重定向回原请求URL(/admin/employee/),而非其他不存在的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:33