Django detail_route PUT. Пустое тело без косой черты

Этот вопрос задан не для решения проблемы, а для того, чтобы понять, почему она работает именно так.

I have ViewSet with some detail_route defined:

views.py

from rest_framework import viewsets

class MyViewSet(viewsets.ViewSet):
    mgr_id = 'my_resource'

    @detail_route(methods=['put'])
    def history(self, request):
        print(request.body)

urls.py

router = DefaultRouter()
router.register(r'my_resource', MyViewSet, 'r'my_resource')

Сейчас, если я вызываю свой API без косой черты:

url = "http://myserver/my_resource/history"
requests.put(url, data=json.dumps({'test': 'passed'})

There is no error but in history request.body is empty.

Однако, когда в конце стоит косая черта:

url = "http://myserver/my_resource/history/"

request.body внезапно передается, как и ожидалось.

Хотелось бы узнать, почему именно так происходит? Ошибки нет, но полезная нагрузка пуста... (Кроме того, это может помочь, если кто-то также борется с этим)

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