Пользовательский заголовок клиента API Django Rest Framework - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь использовать массовое обновление из расширений drf. Чтобы это работало, есть мера предосторожности, требующая заголовка «X-BULK-OPERATION»: «true». Я могу заставить приложение работать, используя curl или мое угловое приложение, но в своих тестах я пытаюсь использовать rest_framework.test.APIClient для отправки запроса part_update, но каждый раз, когда я получаю ответ 400, и при отладке запроса я получаю

ipdb> response.data
{'detail': "Header 'X-BULK-OPERATION' should be provided for bulk operation."}

Это запрос, который я пытаюсь использовать в моем тесте

    response = self.client.patch(
        '/api/v1/db_items/?active=True',
        json.dumps(data),
        content_type='application/json',
        **{X-BULK-OPERATION: 'true'}
    )

Есть ли способ установить заголовки в запросе APIClient?

Я даже пытался изменить имя заголовка и установить его в учетных данных с помощью

self.client.credentials(HTTP_BULK_OPERATION='true')

но я получаю одну и ту же ошибку каждый раз

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Ваше первоначальное решение почти правильное; вы просто пропускаете часть "X" вашего поля заголовка:

self.client.credentials(HTTP_X_BULK_OPERATION='true')

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

0 голосов
/ 31 октября 2018

Ответ крайне плохо документирован, но кажется, что django выполняет собственный анализ переданных заголовков. Я успешно сделал это, изменив код на

    response = self.client.patch(
        '/api/v1/db_items/?active=True',
        json.dumps(data),
        content_type='application/json',
        **{'HTTP_X_BULK_OPERATION':'true'}
    )
...