Я пытаюсь настроить конечную точку API для ответа HTML или JSON в зависимости от заголовков Accept входящего запроса.У меня все работает, тестирование с помощью curl:
> curl --no-proxy localhost -H "Accept: application/json" -X GET http://localhost:8000/feedback/
{"message":"feedback Hello, world!"}
> curl --no-proxy localhost -H "Accept: text/html" -X GET http://localhost:8000/feedback/
<html><body>
<h1>Root</h1>
<h2>feedback Hello, world!</h2>
</body></html>
Я не могу понять, как использовать APITestCase (). Self.client, чтобы указать, какой контент следует принимать.
Мой взгляд выглядит как
class Root(APIView):
renderer_classes = (TemplateHTMLRenderer,JSONRenderer)
template_name="feedback/root.html"
def get(self,request,format=None):
data={"message": "feedback Hello, world!"}
return Response(data)
, а мой тестовый код выглядит как
class RootTests(APITestCase):
def test_can_get_json(self):
response = self.client.get('/feedback/',format='json',Accept='application/json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.accepted_media_type,'application/json')
js=response.json()
self.assertIn('message', js)
self.assertEqual(js['message'],'feedback Hello, world!')
, который умирает в тесте для response.accepted_media_type.Какой правильный способ сделать это?Все, что я могу найти, говорит, что аргумент формата должен быть достаточным.