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