如何在DRF的APIClient()delete()请求中设置标头?

开,我来了

运行测试时,我想创建然后删除一些资源。访问目标服务器需要使用令牌进行身份验证。

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只要标头中给出令牌从例如Postman发送的删除请求就可以正常工作。

如何解决这个问题?

开,我来了

显然,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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章