Я пишу несколько тестов для моего REST API, и у меня есть некоторые проблемы с POST-запросами
У меня есть данные для отправки:
data = {
"patient": 34,
"measure_cat": 52,
"measure_type": "1",
"date": "2019-06-11",
"value": '',
"unit": '',
"nnu_value": "3"
}
Я построил свой заголовок и POST-запрос следующим образом:
headers = {'Authorization': 'Token '+ self.token.key, 'content_type':'application/json', 'Accept-Language' : 'en'}
response = requests.post('http://127.0.0.1:8000/saveMeasure/', json.dumps(data), headers=headers)
А тест - это простое утверждение 201:
self.assertEqual(response.status_code, 201)
Сервер отвечает с HTTP-статусом 415 Неподдерживаемый тип носителя:
Unsupported Media Type: /saveMeasure/
[21/Jun/2019 09:29:47] "POST /saveMeasure/ HTTP/1.1" 415 62
Я пропустил шаг настройки или что-то еще?
Не знаю, актуально это или нет, но я использую приборы в качестве тестовой базы данных.
И это весь импорт, который у меня есть:
import json
import requests
from rest_framework.authtoken.models import Token
from rest_framework.test import APIRequestFactory, APITestCase, APIClient
ОБНОВЛЕНИЕ:
вот код моего представления для почтового запроса:
def post(self, request, *args, **kwargs):
# remove persistant data
persistant = False
newMeasures = []
for measure in request.data:
persistant = check_persistant_measure(measure['measure_cat'], measure['measure_type'], measure['patient'], measure['value'], measure['nnu_value'], measure['b_value'])
if persistant == False:
newMeasures.append(measure)
# add Related measure automatically calculated to request data
try:
calc_data = get_related_measures(newMeasures)
for newM in calc_data:
newMeasures.append(newM)
except:
pass
serializer = self.get_serializer(data=newMeasures, many = True, allow_empty = False)
serializer.is_valid(raise_exception = True)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
И это часть для тестирования:
class CustomerAPITestAdmin(APITestCase):
fixtures = ['new-fixtures.json']
def tokenSetUp(self,user):
self.token = Token.objects.get(user__username=user)
self.client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)
def testSaveMeasure(self):
self.tokenSetUp('jpmichel')
self.executeTest()
def executeTest(self):
data = {
"patient": 34,
"measure_cat": 52,
"measure_type": "1",
"date": "2019-06-11",
"value": '',
"unit": '',
"nnu_value": "3"
}
print(json.dumps(data))
headers = {'Authorization': 'Token '+ self.token.key, 'content_type':'application/json', 'Accept-Language' : 'en'}
response = requests.post('http://127.0.0.1:8000/saveMeasure/', data=json.dumps(data), headers=headers)
self.assertEqual(response.status_code, 201)