Странное поведение Django Querydict: объединяет словарь POST в один ключ

У меня действительно странное поведение при использовании тестового клиента в 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, который я отправляю в почтовом запросе, объединяется в один ключ в 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

5
задан Community 23 May 2017 в 12:16
поделиться