Json в запрос django

Попытка передать пользовательские данные json с помощью jquery в django, но django не может правильно получать данные. образец данных:

var data = {};
data.mylist = [{'a':'b'},{'a':'b'}];
data.myvar = 'something';
data.action = 'submit_invoice'
$.post(window.invoice_url, data, function(res){
    console.log(res)
});

Представление Django:

def foo(request):
    mylist = request.POST.getlist('mylist',None)
    myvar = request.POST.get('myvar', None)
    print(mylist)
    print(myvar)
    print(request.POST)

печать - это что-то, [] и <QueryDict: {'action': ['submit_invoice'], 'mylist [1] [a]': ['b'], 'myvar': ['something'], 'mylist [0] [a] ': [' b ']}> и django не может правильно получить mylist.

Что, на ваш взгляд, дает print (request.data['mylist'])?

Red Cricket 26.10.2018 06:47
0
1
147
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы не можете передавать объекты js напрямую в url,

Используйте v_data = jQuery.param(data), отправьте v_data с запросом.

Метод param() создает сериализованное представление массива или объекта, которое может быть понятно различным фреймворкам, таким как php, ruby, django и т. д.

Чтобы снова преобразовать его в Python

from urllib import parse
value = parse.parse_qs(self.request.POST.get('v_name'))

Обратите внимание, что с помощью prase вы можете потерять некоторую информацию, поэтому перепроверьте свои данные после их получения в python.

Ответ принят как подходящий

Если вы хотите отправить JSON, вы должны передать stringify объекту, который вы передаете, а также установить для dataType значение json:

$.post(window.invoice_url, JSON.stringify(data), function(res){
    console.log(res)
}, 'json');

Затем в вашем представлении Django вы должны загрузить тело запроса с помощью json.loads(), после чего вы можете получить доступ к нужным атрибутам:

import json

def foo(request):
    data = json.loads(request.body.decode('utf-8'))
    mylist = data['mylist']
    myvar = data['myvar']
    print(mylist)
    print(myvar)

Другие вопросы по теме