Как установить заголовки в запросе DRIC APIClient () delete ()? - PullRequest
1 голос
/ 14 апреля 2020

При запуске тестов я хотел бы создать, а затем удалить некоторые ресурсы. Доступ к целевому серверу требует аутентификации с помощью токена.

from django.test import TestCase
from rest_framework.test import APIClient

(...)

class MyTest(TestCase):
    def setUp(self):
        self.client = APIClient()

    def test_creation_and_deletion(self):
        payload = {"key": "value"}

        # This works, but it's handled by a custom create() method from views.py:
        res = self.client.post(<url>, payload)
        (...)

        # This doesn't work, no custom delete() method is defined anywhere:
        tar_headers = {"private-token": "<token>"}
        res2 = self.client.delete(res.data["target_resource_url"], headers=tar_headers)

        # Either this doesn't work:
        self.client.headers.update(tar_headers)
        res3 = self.client.delete(res.data["target_resource_url"])

Печать res2 дает следующий вывод:

<HttpResponseNotFound status_code=404, "text/html">

Вызов res3 выдает ошибку:

AttributeError: 'APIClient' object has no attribute 'headers'

Запросы на удаление, отправленные на target_resource_url, например, от Почтальона, работают нормально, если токен указан в заголовках.

Как решить эту проблему?

1 Ответ

0 голосов
/ 15 апреля 2020

Очевидно, что невозможно аутентифицироваться с Private-Token при запросе удаления через APIClient(). Но вместо этого можно использовать старую добрую библиотеку requests:

import requests

HEADERS = {'PRIVATE-TOKEN': <TOKEN>}

res = ...
if "api_link" in res.data:
    requests.delete(res.data["api_link"], headers=HEADERS)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...