Django REST Framework路由未在API列表显示且无法访问求助
解决思路
针对你遇到的DRF路由不显示、访问404问题,从以下几个方向排查:
ViewSet缺少核心动作方法
你继承的ViewSet本身没有实现任何默认动作(如list、retrieve),DefaultRouter只会为包含有效动作的ViewSet生成路由。添加必要的动作方法即可:from rest_framework.response import Response class myapiViewSet(ViewSet): permission_classes = (MaintenanceCheck,) throttle_classes = [UserRateThrottle] def list(self, request): # 替换为你的业务逻辑 return Response({"status": "ok"})如果是操作数据库模型,直接改用
ModelViewSet(需配置queryset和serializer_class),它会自动生成CRUD相关路由。检查权限类
MaintenanceCheck的实现
若该权限类的has_permission方法返回False,或抛出异常,可能导致路由被拦截(表现为404而非403)。先临时将其替换为AllowAny测试:from rest_framework.permissions import AllowAny class myapiViewSet(ViewSet): permission_classes = (AllowAny,) throttle_classes = [UserRateThrottle] # ... 动作方法验证路由生成结果
运行python manage.py show_urls(需先安装django-extensions),查看输出中是否存在/api/myapi/相关路由。如果没有,说明ViewSet不符合Router的生成规则。排查路由顺序冲突
确保path('api/', include(router.urls))在urlpatterns中的位置优先于其他可能匹配/api/前缀的路由,避免Router的路由被提前匹配覆盖。
内容的提问来源于stack exchange,提问作者CanAnyOneHelpMe
相关产品推荐
相关产品推荐

