JSON в Django запрос - PullRequest
       7

JSON в Django запрос

0 голосов
/ 26 октября 2018

Попытка передать пользовательские данные 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)
});

Вид Джанго:

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

печать - это что-то, [] и и django не могут правильно получить mylist.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если вы хотите отправить 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)
0 голосов
/ 26 октября 2018

Вы не можете передавать объекты 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...