Django (DRF) не может POST-данные для URL с аналогичным путем - PullRequest
1 голос
/ 23 мая 2019

В моем url conf у меня есть два похожих шаблона:

urlpatterns = [
    path('chat/', views.chat),  # create chat
    path('chat/message/', views.message),  # create message
]

Второй путь работает, как и ожидалось, однако, когда я пытаюсь POST-данные к chat/, я получаю ошибку 405 и {"detail":"Method \"POST\" not allowed."} errorсообщение.Код в представлении работает, если я изменю chat/ на что-то более конкретное, например chat/create/, то все работает нормально.Тем не менее, это не , что я хочу сделать.Я думал, что django будет соответствовать первому URL, который соответствует запросу.Почему это происходит?Это ошибка или ожидаемое поведение?

1 Ответ

0 голосов
/ 23 мая 2019

Я столкнулся с подобной проблемой. Я создал новый nested_route декоратор, который во многом похож на list_route и detail_route. Я обычно перенаправляю на другой набор просмотра для обработки вложенного пути. Проблема заключалась в том, что поток читался слишком рано (с помощью отправки родительского набора), поэтому мне нужно было убедиться, что функция initialize_request была вызвана только один раз для данного запроса.

Отрабатывая приведенный выше комментарий @ rsalmaso, я переопределил метод initialize_request в дочерних наборах следующим:

def initialize_request(self, request, *args, **kwargs):
        if not isinstance(request, Request):
            request = super().initialize_request(request, *args, **kwargs)
        return request

Это работает нормально, но я думаю, что есть какой-то атрибут для игнорирования функции initialize_request в диспетчере или для глобальной проверки только для запуска initialize_request iff isinstance(request, rest_framework.request.Request) == False. Я рад подготовить пиар с тестами, если это приемлемо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...