Mənim gələn Django müraciətimdə mənim JSON məlumatları harada?

Django / Python istifadə edərək gələn JSON / Ajax istəklərini idarə etməyə çalışıram.

request.is_ajax() sorğuda True , lakin faydalı məlumatın JSON məlumatları ilə əlaqəli olduğu barədə heç bir fikrim yoxdur.

request.POST.dir aşağıdakıları ehtiva edir:

 ['__class__', '__cmp__', '__contains__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', '__weakref__', '_assert_mutable', '_encoding', '_get_encoding', '_mutable', '_set_encoding', 'appendlist', 'clear', 'copy', 'encoding', 'fromkeys', 'get', 'getlist', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'lists', 'pop', 'popitem', 'setdefault', 'setlist', 'setlistdefault', 'update', 'urlencode', 'values'] 

Göründüyü kimi, istek düymələrində heç bir açar yoxdur.

Firebug-da POST-i izləyərkən, JSON məlumatları sorğuda göndərilir.

108
30 июля '09 в 20:22 2009-07-30 20:22 user122299 30 İyul 2013 tarixində 20:22 'də təyin olundu. 2009-07-30 20:22
@ 12 cavab

JSON-ı Django'ya göndərirsinizsə, request.body istəməyinizi xahiş edirəm ( request.raw_post_data , Django <1.4). Bu, mesaj vasitəsilə göndərilən xam JSON məlumatlarını verəcəkdir. Buradan daha da emal edə bilərsiniz.

JavaScript, jQuery , jquery-json və Django istifadə nümunəsi.

Javascript:

 var myEvent = {id: calEvent.id, start: calEvent.start, end: calEvent.end, allDay: calEvent.allDay }; $.ajax({ url: '/event/save-json/', type: 'POST', contentType: 'application/json; charset=utf-8', data: $.toJSON(myEvent), dataType: 'text', success: function(result) { alert(result.Result); } }); 

Django:

 def save_events_json(request): if request.is_ajax(): if request.method == 'POST': print 'Raw Data: "%s"' % request.body return HttpResponse("OK") 

Django <1.4:

  def save_events_json(request): if request.is_ajax(): if request.method == 'POST': print 'Raw Data: "%s"' % request.raw_post_data return HttpResponse("OK") 
172
11 июня '10 в 9:56 2010-06-11 09:56 Cavab Jared Knipp tərəfindən 11 iyun 'da 9:56' da verildi 2010-06-11 09:56

Eyni problemim vardı. Mən kompleks bir JSON cavab göndərdim və sorğumu istifadə edərək məlumatlarımı oxudum. POST lüğəti.

Məlumatlarım JSON POST:

 //JavaScript code: //Requires json2.js and jQuery. var response = {data:[{"a":1, "b":2},{"a":2, "b":2}]} json_response = JSON.stringify(response); // proper serialization method, read // http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/ $.post('url',json_response); 
border=0

Bu vəziyyətdə aurealus tərəfindən verilən üsuldan istifadə etməlisiniz. Request@blog.az saytını oxuyun və json stdlib ilə deserialize edin.

 #Django code: import json def save_data(request): if request.method == 'POST': json_data = json.loads(request.body) # request.raw_post_data w/ Django < 1.4 try: data = json_data['data'] except KeyError: HttpResponseServerError("Malformed data!") HttpResponse("Got json data") 
39
14 июля '10 в 12:13 2010-07-14 12:13 cavab 14 iyun 2010- cu ildə saat 12 : 13-Stricjux tərəfindən verilmişdir

Metod 1

Müştəri: JSON olaraq göndər

 $.ajax({ url: 'example.com/ajax/', type: 'POST', contentType: 'application/json; charset=utf-8', processData: false, data: JSON.stringify({'name':'John', 'age': 42}), ... }); //Sent as a JSON object {'name':'John', 'age': 42} 

Server:

 data = json.loads(request.body) # {'name':'John', 'age': 42} 

Metod 2

Müştəri: x-www-form-urlencoded kimi göndərin
(Qeyd: contentTypeprocessData dəyişdirilir, JSON.stringify tələb olunmur)

 $.ajax({ url: 'example.com/ajax/', type: 'POST', data: {'name':'John', 'age': 42}, contentType: 'application/x-www-form-urlencoded; charset=utf-8', //Default processData: true, }); //Sent as a query string name=John> 

Server:

 data = request.POST # will be <QueryDict: {u'name':u'John', u'age': 42}> 

Versiya 1.5+ -da dəyişildi: https://docs.djangoproject.com/en/dev/releases/1.5/#non-form-data-in-http-requests

HTTP sorğularında formatlanmamış məlumatlar : request.POST sorğusu başlıqdakı qeyri-spesifik məzmun növləri ilə artıq HTTP müraciətləri vasitəsilə göndərilən məlumatları daxil etməyəcəkdir. Əvvəlki versiyalarda, multipart / form-data və ya tətbiq / x-www-form-urlencoded başqa məzmun növləri istifadə edərək göndərilən məlumat hələ də request.POST atributunda təqdim olunacaq. Bu hallar üçün orijinal POST məlumatlarına daxil olmaq istəyən qurumlar request.body xüsusiyyətindən istifadə etməlidir.

Yəqin ki bağlı

26
11 апр. Cavab Medorator tərəfindən 11 aprel tarixində verilir 2014-04-11 12:07 '14 at 12:07 2014-04-11 12:07

request.raw_response artıq qadağan edilmişdir. Əvəzinə yararlı XML məlumatları, ikili şəkillər və s. Kimi qeyri-ənənəvi forma request.body idarə etmək yerinə request.body istifadə edin.

Məsələ ilə əlaqədar Django sənədləri .

22
12 июня '12 в 8:06 2012-06-12 08:06 cavab 12 İyun '12 'də saat 08:06 ' da Kevin S Lin tərəfindən verilmişdir

Python 3-də strinqləri təmsil edən başqa bir yola malik olduğunu xatırlamaq vacibdir - bunlar bayt diziliyidir.

Django 1.9 və Python 2.7 istifadə edərək, JSON məlumatlarını əsas hissəyə (və başlıqlara) göndərmək kimi aşağıdakı kimi istifadə etməlisiniz:

 mydata = json.loads(request.body) 

Lakin Django 1.9 və Python 3.4 üçün istifadə etməlisiniz:

 mydata = json.loads(request.body.decode("utf-8")) 

Mən ilk Py3 Django app yaratmaqla bu öyrənmə curve keçdim!

9
28 дек. Cavab Richard Cooke tərəfindən verilir. 2015-12-28 17:11 '16 'da 17:11' de, 2015-12-28 17:11

django 1.6 python haqqında 3.3

müştəri

 $.ajax({ url: '/urll/', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify(json_object), dataType: 'json', success: function(result) { alert(result.Result); } }); 

Server

 def urll(request): if request.is_ajax(): if request.method == 'POST': print ('Raw Data:', request.body) print ('type(request.body):', type(request.body)) # this type is bytes print(json.loads(request.body.decode("utf-8"))) 
8
24 июля '14 в 20:06 2014-07-24 20:06 Cavab, Rubber Duck 24 İyul, '14 'də 20:06 2014-07-24 20:06 ' də verilir

request.raw_post_data qadağan edilmişdir. Bunun yerinə request.body istifadə edin

5
21 нояб. Cavab 21 dekabrda Andres tərəfindən verilir. 2013-11-21 16:28 '13 at 16:28 2013-11-21 16:28

HTTP POST yükü yalnız bayt dəstəsidir. Django (çox çərçivə kimi) parametr kodlu URL-lərdən bir lüğətə və ya MIME-çoxpart kodlamasına çevrilir. Siz sadəcə POST məzmununa JSON məlumatlarını yükləsəniz, Django onu şifrələməyəcək. POST'un (və lüğətdən deyil) bütün məzmunundan JSON kodunu verin; və ya bir MIME çox səhifəli sarmalayıcıda JSON məlumatları qoyur.

Qısacası javascript kodunu göstərin. Problem də var.

5
30 июля '09 в 21:03 2009-07-30 21:03 Javier 30 iyul 'da 09:03' da cevap veriyor 2009-07-30 21:03
 html code file name : view.html <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script> $(document).ready(function(){ $("#mySelect").change(function(){ selected = $("#mySelect option:selected").text() $.ajax({ type: 'POST', dataType: 'json', contentType: 'application/json; charset=utf-8', url: '/view/', data: { 'fruit': selected }, success: function(result) { document.write(result) } }); }); }); </script> </head> <body> <form> <br> Select your favorite fruit: <select id="mySelect"> <option value="apple" selected >Select fruit</option> <option value="apple">Apple</option> <option value="orange">Orange</option> <option value="pineapple">Pineapple</option> <option value="banana">Banana</option> </select> </form> </body> </html> Django code: Inside views.py def view(request): if request.method == 'POST': print request.body data = request.body return HttpResponse(json.dumps(data)) 
2
22 дек. Rajan Mandankanın 22 dekabrda verdiyi cavab 2014-12-22 12:07 '14 da 12:07 2014-12-22 12:07

Belə bir şey. İşləmişdir: Müştərilərdən məlumat tələb edin

 registerData = { {% for field in userFields%} {{ field.name }}: {{ field.name }}, {% endfor %} } var request = $.ajax({ url: "{% url 'MainApp:rq-create-account-json' %}", method: "POST", async: false, contentType: "application/json; charset=utf-8", data: JSON.stringify(registerData), dataType: "json" }); request.done(function (msg) { [alert(msg);] alert(msg.name); }); request.fail(function (jqXHR, status) { alert(status); }); 

Server prosesi tələbi

 @csrf_exempt def rq_create_account_json(request): if request.is_ajax(): if request.method == 'POST': json_data = json.loads(request.body) print(json_data) return JsonResponse(json_data) return HttpResponse("Error") 
1
24 сент. Cavab Nghia Tu 24 sep verilir . 2017-09-24 17:52 '17 də 17:52 'də 2017-09-24 17:52' də

Açısal istifadə edərək, tələb üçün başlıq əlavə et və ya modul konfiqurasiya başlıqlarına əlavə etməlisiniz: {'Content-Type': 'application/x-www-form-urlencoded'}

 $http({ url: url, method: method, timeout: timeout, data: data, headers: {'Content-Type': 'application/x-www-form-urlencoded'} }) 
-2
26 марта '15 в 11:29 2015-03-26 11:29 Cavab Mikalai Naunyka tərəfindən 26 Mart '15 'də saat 11:29' də verilir. 2015-03-26 11:29

request.POST yalnız bir lüğət kimi bir obyektdir, belə ki, yalnız dict sözdizimini göstərin.

Form alanınızı fred hesab edirsənsə, belə bir şey edə bilərsiniz:

 if 'fred' in request.POST: mydata = request.POST['fred'] 

Alternativ olaraq, POST məlumatlarını emal etmək üçün bir forma obyektindən istifadə edin.

-3
30 июля '09 в 20:31 2009-07-30 20:31 30 iyul '09 'da saat 20:31' də Michael Van der Westhuizenə cavab verən 2009-07-30 20:31

yazıları ilə bağlı digər suallar ya da sual