Django JSON Post Разбор запроса - PullRequest
0 голосов
/ 09 мая 2018

Мой клиент передает этот json как сообщение на сервер django:

data={  'supplier': supplier_name,
        'date': date,
        'payment':payment,
        'materials':[{"name":name,"qtd":qtd,"price":price},
                    {"name":name,"qtd":qtd,"price":price},
                    {"name":name,"qtd":qtd,"price":price}]
}

Я использую толчок, чтобы положить материалы:

data['materials'].push({"name":name,"qtd":qtd,"price":price});

Мой вид django обрабатывает такие данные:

supplier=request.POST.get('supplier')
date=request.POST.get('date')

Когда я пытаюсь это сделать, содержимое материалов «none»:

materials=request.POST.get('materials')

Как можно использовать список в дальнейшем коде?

Ajax отправляется так:

$.ajax({
    type:"POST",
    url:"{% url 'validate_purchase' %}",
    data: data,
    dataType: 'json',
    success: function(data){
    }
});

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Данные для отправки в формате json должны быть «строковыми», поэтому вам нужно выполнить «JSON.stringify (data)»

$.ajax({
        type:"POST",
        url:"{% url 'validate_purchase' %}",
        data: JSON.stringify(data),
        dataType: "application/json; charset=UTF-8",
        success: function(data){
        }
    });
0 голосов
/ 09 мая 2018

Если вы передаете данные, используя Content-Type: application/json, вы можете получить доступ к json из request.body

Пример:

(myblog)  ✘ ✝ ~/projects/myblog/base  up-sell±  curl --header "Content-Type: application/json" \
--request POST \
--data '{"supplier": "x", "date": "x", "materials": [{"price": "x", "qtd": "x", "name": "x"}, {"price": "x", "qtd": "x", "name": "x"}, {"price": "x", "qtd": "x", "name": "x"}], "payment": "x"}' \
http://localhost:8000/motor/upsell/set-upsell/ \
> -H "Content-Type: application/json"

views.py:

ipdb> import json
ipdb> json.loads(request.body)
{u'supplier': u'x', u'date': u'x', u'materials': [{u'price': u'x', u'qtd': u'x', u'name': u'x'}, {u'price': u'x', u'qtd': u'x', u'name': u'x'}, {u'price': u'x', u'qtd': u'x', u'name': u'x'}], u'payment': u'x'}

Обновление

Пример с помощью вызова ajax

Вот функция ajax,

data = {"supplier": "x", "date": "x", "materials": [{"price": "x", "qtd": "x", "name": "x"}, {"price": "x", "qtd": "x", "name": "x"}, {"price": "x", "qtd": "x", "name": "x"}], "payment": "x"}

$.ajax({
    type: 'POST',
    url: 'http://localhost:8000/motor/upsell/set-upsell/',
    data: JSON.stringify(data),
    contentType: "application/json",
    dataType: 'json'
});

код Python,

ipdb> import json
ipdb> request.body
'{"supplier":"x","date":"x","materials":[{"price":"x","qtd":"x","name":"x"},{"price":"x","qtd":"x","name":"x"},{"price":"x","qtd":"x","name":"x"}],"payment":"x"}'
ipdb> json.loads(request.body)
{u'supplier': u'x', u'date': u'x', u'materials': [{u'price': u'x', u'qtd': u'x', u'name': u'x'}, {u'price': u'x', u'qtd': u'x', u'name': u'x'}, {u'price': u'x', u'qtd': u'x', u'name': u'x'}], u'payment': u'x'}
ipdb>
...