Heroku : Ошибка сервера, статус=(500), байты=403

Все в проекте работает, но у меня проблема только с этим запросом, и я не знаю, что это такое.

Журналы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)  
]    

Возможно, это из более новой части 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. Возможно, вам могут понадобиться другие url вокруг спичек.

matches/statistics, например, или matches/<str:player>/statistics/

Добавляя player=, вы, по сути, делаете доступный URI yourserver.com/api/player=PlayerName/matches

Ретроспективно этот параметр НИКОГДА не будет введен таким образом в этой части URL.

Параметры всегда добавляются в конце после ? и разделяются & И, возможно, это то, что вы хотите сделать, и в этом случае у вас не будет части URL <str:player>, а вместо этого вы позволите скриптам на стороне клиента добавить эти параметры, или пользователям API, в зависимости от того, кто взаимодействует с вашим представлением.

В качестве бонусного раунда, вам также не нужно делать queryset.filter().all(), потому что .all() является избыточным :)

Вернуться на верх