Ответ 1
Кажется, что ваш клиент отправляет JSON, а не formencoded данные. Вместо доступа к request.POST
используйте request.body
(request.raw_post_data
в версиях 1.3 или ниже) и используйте json.loads()
для преобразования в dict.
У меня есть querydict, который выглядит следующим образом:
<QueryDict: {u'{"content":"aa","id":"1"}': [u'']}>
Как извлечь id
?
Я пробовал делать queryDictExample.get("id")
, но это не сработало.
Кажется, что ваш клиент отправляет JSON, а не formencoded данные. Вместо доступа к request.POST
используйте request.body
(request.raw_post_data
в версиях 1.3 или ниже) и используйте json.loads()
для преобразования в dict.
Может быть, это не в полной мере относится к вам. Но когда я искал это, ваш вопрос был первым вопросом 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
Это работает для нескольких значений:
dict(MyDict.lists())
Ключами Dict являются поисковые вары, а значения dict - списки значений запроса.
Вы можете использовать - request.data.get("content")
Это даст вам данные непосредственно, если на переднем конце (jQuery, Angular) вы НЕ использовали JSON.stringify(data)
.
это работает также для значений, которые являются списками:
dict_ = {k: qdict.getlist(k) if len(qdict.getlist(k))>1 else v for k, v in qdict.items()}
Я только что испытал ту же проблему. Это произошло, когда я пытался сохранить данные запроса в request.POST вместо request.body. Я использовал Django с доверенным внутренним маршрутом, уже настроенным для работы с запросом .POST
Чтобы отправить данные в рамках request.POST с API выборки, мне пришлось использовать "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8 ', который превратил мои строковые данные в формате JSON в формат, подобный приведенному выше.
Узнав, как сериализовать данные из ответа Дэниела, я наткнулся на $.param(data), функцию jquery, которая должна правильно отформатировать ее для вас.
Вы можете использовать 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