添加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
相关产品推荐
相关产品推荐

