【问题标题】:Heroku : Server Error, Status=(500), bytes=403Heroku:服务器错误,状态=(500),字节= 403
【发布时间】:2022-01-07 13:14:08
【问题描述】:

项目中的一切都在工作,但我只有这个请求有问题,我不知道它是什么。

heroku 日志:

2021-11-30T19:23:21.705472+00:00 app[web.1]: 10.1.43.186 - - [30/Nov/2021:19:23:21 +0000] "GET /api/player=1/matches HTTP/1.1" 500 145 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"   
2021-11-30T19:23:21.707787+00:00 heroku[router]: at=info method=GET path="/api/player=1/matches" host=football-players-stats-api.herokuapp.com request_id=e94d6c13-3fbd-4825-b696-282992be5bc9 fwd="186.58.74.102" dyno=web.1 connect=0ms service=27ms status=500 bytes=403 protocol=https

观看次数:

class MatchesView(generics.ListAPIView): 
    serializer_class = MatchesSerializer    
    permissions      = (IsAuthenticated)        
    def get_queryset(self):    
        player = self.kwargs['player']            
        return Matches.objects.filter(player=player).all() 

网址:

app_name = 'api'
urlpatterns = [    
    path('',include(router.urls)),
    path('player=<str:player>/matches',views.MatchesView)  
]    

【问题讨论】:

  • 是否需要加as_view()。所以views.MatchesView.as_view()

标签: python django heroku django-rest-framework


【解决方案1】:

也许这是来自我不熟悉的 django 的较新部分,但我认为只需要更改:

path('player=<str:player>/matches',views.MatchesView)

为此:

path('<str:player>/matches',views.MatchesView.as_view())

甚至更好:

path('matches/<str:player>',views.MatchesView.as_view())

第三个选项作为 url 似乎更有意义。也许您可能想要匹配的其他网址。

例如matches/statistics,或matches/&lt;str:player&gt;/statistics/

通过添加player=,您基本上可以创建可访问的URI yourserver.com/api/player=PlayerName/matches

回顾过去,永远不会在 URL 的这一部分以这种方式引入此参数。

参数总是在? 之后添加并由&amp; 分隔,也许这实际上是您想要做的,在这种情况下,您将没有URL 的&lt;str:player&gt; 部分,而是将允许客户端脚本添加这些参数或 API 用户,以与您的视图交互。

作为奖励回合,您也不需要执行queryset.filter().all(),因为.all() 是多余的:)

【讨论】:

    猜你喜欢
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多