Извлечение элементов из QueryDict

У меня есть querydict, который выглядит следующим образом:

<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}>

Как извлечь id?

Я пробовал делать queryDictExample.get("id"), но это не сработало.

Ответы

Ответ 1

Кажется, что ваш клиент отправляет JSON, а не formencoded данные. Вместо доступа к request.POST используйте request.body (request.raw_post_data в версиях 1.3 или ниже) и используйте json.loads() для преобразования в dict.

Ответ 2

Может быть, это не в полной мере относится к вам. Но когда я искал это, ваш вопрос был первым вопросом Stackoverflow.

Я просто хотел получить основные данные POST в Django. Так что просто использование GET отлично сработало для меня. Как утверждают другие, может быть проще отформатировать любой скрипт, создающий запрос.

По сути, у меня есть AJAX, который делает сообщение для Django, POST выглядит примерно так:

params = name=somename&data=abcdefg
http.send(params);

затем в моем view.py я сделал это:

def somefuntion(request):
    if request.method == 'POST':
        log.info('POST applied')
        alldata=request.POST
        log.debug(alldata)
        data = alldata.get("data", "0")
        name = alldata.get("name", "0")
        log.info("POST name: " + name)
        log.info("POST data: " + data)

Вывод всех данных:

<QueryDict: {u'data': [u'abcdefg'], u'name': [u'somename']}>

и команды get дают:

name: somename
data: abcdefg

Ответ 3

Это работает для нескольких значений:

dict(MyDict.lists())

Ключами Dict являются поисковые вары, а значения dict - списки значений запроса.

Ответ 4

Вы можете использовать - request.data.get("content") Это даст вам данные непосредственно, если на переднем конце (jQuery, Angular) вы НЕ использовали JSON.stringify(data).

Ответ 5

это работает также для значений, которые являются списками:

dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}

Ответ 6

Я только что испытал ту же проблему. Это произошло, когда я пытался сохранить данные запроса в request.POST вместо request.body. Я использовал Django с доверенным внутренним маршрутом, уже настроенным для работы с запросом .POST

Чтобы отправить данные в рамках request.POST с API выборки, мне пришлось использовать "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8 ', который превратил мои строковые данные в формате JSON в формат, подобный приведенному выше.

Узнав, как сериализовать данные из ответа Дэниела, я наткнулся на $.param(data), функцию jquery, которая должна правильно отформатировать ее для вас.

Ответ 7

Вы можете использовать values_list для запроса dict, т.е.: MyDict.values_list('id') - он вернет список списков с идентификатором внутри. Чтобы вернуть список id, используйте MyDict.values_list ('id', flat = True)

Полезные ссылки:

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values-list

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#values