परीक्षण चलाते समय, मैं कुछ संसाधन बनाना और फिर हटाना चाहता हूं। लक्ष्य सर्वर तक पहुंच के लिए टोकन के साथ प्रमाणीकरण की आवश्यकता होती है।

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 को हटाने के अनुरोध भेजे गए जब तक हेडर में टोकन दिया जाता है, डाकिया ठीक काम करता है।

इस मुद्दे से कैसे संपर्क करें?

4
AbreQueVoy 14 अप्रैल 2020, 18:59

1 उत्तर

सबसे बढ़िया उत्तर

जाहिर है, APIClient() के माध्यम से हटाने का अनुरोध करते समय Private-Token के साथ प्रमाणित करना संभव नहीं है। लेकिन इसके बजाय, अच्छी पुरानी requests लाइब्रेरी का उपयोग किया जा सकता है:

import requests

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

res = ...
if "api_link" in res.data:
    requests.delete(res.data["api_link"], headers=HEADERS)
0
AbreQueVoy 15 अप्रैल 2020, 12:17