Heroku部署DRF项目请求player赛事查询接口返回500服务器错误求助
500错误排查结果
错误产生原因
- 权限配置错误:一是属性名不符合DRF规范,DRF类视图的权限配置属性为
permission_classes,你定义的permissions属性无法被框架识别;二是值的格式错误,(IsAuthenticated)是单个类对象,不是框架要求的元组/列表类型,解析时会抛出类型错误。 - 路由配置错误:Django的
path方法需要传入可调用的视图对象,你直接传入类视图views.MatchesView,没有调用as_view()方法将类转为可调用实例,触发运行时错误。 - 参数类型不匹配风险:路由中捕获的
player参数是字符串类型,如果Matches模型的player字段为外键或整数字段,直接用字符串值过滤会触发字段类型不匹配错误。
修复方案
- 修正视图的权限配置
class MatchesView(generics.ListAPIView): serializer_class = MatchesSerializer # 改为正确的属性名,同时用带逗号的元组格式,或者用列表格式避免漏写逗号 permission_classes = (IsAuthenticated,) def get_queryset(self): # 将字符串参数转为整数匹配字段类型 player = int(self.kwargs['player']) return Matches.objects.filter(player=player).all()
- 修正路由配置,补充
as_view()调用
app_name = 'api' urlpatterns = [ path('',include(router.urls)), path('player=<str:player>/matches',views.MatchesView.as_view()) ]
内容的提问来源于stack exchange,提问作者Tomas Garrido
相关产品推荐
相关产品推荐

