2

Я пытаюсь проверить свой метод обновления на моем представлении. Представленный вид - это модельное представление, взятое из drf. Для обновления мне нужно будет отправить запрос на отправку. Поскольку это не всегда поддерживается, есть два способа сообщить серверу, что я делаю запрос на отправку, первый, который не соответствует моим потребностям, - это использовать дополнительное поле для формирования с именем _method и установить его на put. Поскольку мне нужно публиковать данные json, мне нужно использовать второй способ, который использует заголовок X-HTTP-Method-Override.Django Test Client Override Header

Чтобы разместить свои данные в TestCase я использую следующий код:

header = {'X_HTTP_METHOD_OVERRIDE': 'PUT'} 
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header) 

Но, к сожалению, результат я получаю {'detail':'Method POST not allowed.'}. Я проверил поведение сервера с помощью аддона (Postman), где я также указал заголовок X-HTTP-Method-Override. Никаких исключений не возникает. Мне нужно знать, как правильно передать заголовок тестовому клиенту django, иначе тестирование будет действительно раздражать здесь.

ответ

5

Вам необходимо указать заголовок как 'HTTP_X_HTTP_METHOD_OVERRIDE' вместо 'X_HTTP_METHOD_OVERRIDE' i.e. Добавить HTTP_ в начале заголовка.

header = {'HTTP_X_HTTP_METHOD_OVERRIDE': 'PUT'} 
response = client.post('/model/1/', content_type='application/json', data=post_data_clean, **header) 

Из Django documentation:

HTTP заголовков в запросе, преобразуются в META ключи путем преобразования все символы в верхнем регистре, заменяя любые переносы с подчеркиванием и добавляя HTTP_ префикс к имени , Так, например, заголовок , называемый X-Bender, будет отображаться в META ключ HTTP_X_BENDER.

+1

Спасибо за ссылку на документ! И ответ причины. – Iwan1993