Я испытываю очень странное поведение при использовании тестового клиента в django.
Я использую POST
для отправки данных в мое приложение django.Я обычно делаю это из приложения для iPhone и / или из тестовой HTML-формы.На стороне сервера это то, как я справляюсь:
def handle_query(request):
print request
q = con.QueryLog()
q.ID = request.POST.get('ID', '')
q.device = request.POST.get('device-model', '')
....
Этот оператор печати выглядит так, как вы ожидаете, то есть каждый параметр в запросе на публикацию превращается в ключ в словаре:
POST: QueryDict: {u'app-version ': [u'3.0'], u'server-version ': [u'v3d0'],
Однако я начал писать некоторые тесты, используяТестовый клиент Django, и что бы я ни пытался, словарь параметров POST, которые я отправляю в запросе post, объединяется в один ключ в QueryDict
.Позвольте мне проиллюстрировать это следующим кодом:
class SearchTest (TestCase): def setUp (self): pass
def test_search(self):
request = HttpRequest()
data = '{"amzn_locale": "com"}'
# request._raw_post_data = data
resp = self.client.post(
'/is/',
data=data,
content_type='application/x-www-form-urlencoded',
# content_type='application/json',
)
Тот же оператор печати на стороне сервера показывает необъяснимую группировкусловарь в строку:
POST: QueryDict: {u'{"amzn_locale":"com"}': [u'']}>,
Если я установлю данные для фактического словаря, то же самое
data = {"amzn_locale": "com"}
Установка request._raw_post_data ничего не изменит.Кроме того, изменение
content_type='application/json'
Любая помощь будет высоко ценится.Из этого вопроса stackoverflow кажется, что я не первый, кто сталкивается с этим POST-запросом iphone Json к серверу Django создает QueryDict в QueryDict