JSON atsako sukūrimas naudojant „Django“ ir „Python“

Aš bandau konvertuoti serverio pusės Ajax atsakymo scenarijų į Django HttpResponse, bet, matyt, jis neveikia.

Tai yra scenarijaus serverio pusė:

  $validateValue=$_POST['validateValue']; $validateId=$_POST['validateId']; $validateError=$_POST['validateError'];  $arrayToJs = array(); $arrayToJs[0] = $validateId; $arrayToJs[1] = $validateError; if($validateValue =="Testuser"){ // Validate?? $arrayToJs[2] = "true"; // RETURN TRUE echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURN ARRAY WITH success } else{ for($x=0;$x<1000000;$x++){ if($x == 990000){ $arrayToJs[2] = "false"; echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURNS ARRAY WITH ERROR. } } } 

Ir tai yra konvertuotas kodas.

 def validate_user(request): if request.method == 'POST': vld_value = request.POST.get('validateValue') vld_id = request.POST.get('validateId') vld_error = request.POST.get('validateError') array_to_js = [vld_id, vld_error, False] if vld_value == "TestUser": array_to_js[2] = True x = simplejson.dumps(array_to_js) return HttpResponse(x) else: array_to_js[2] = False x = simplejson.dumps(array_to_js) error = 'Error' return render_to_response('index.html',{'error':error},context_instance=RequestContext(request)) return render_to_response('index.html',context_instance=RequestContext(request)) 

Python sąrašui koduoti naudoju „simplejson“ (taip jis grąžins JSON masyvą). Aš vis dar negalėjo suprasti problemos. Bet aš manau, kad kažkas negerai dėl aido.

387
11 марта '10 в 22:40 2010-03-11 22:40 Jungiklis nustatytas kovo 11 d., 10 val. 10:40 2010-03-11 22:40
@ 14 atsakymų

Paprastai aš naudoju žodyną, o ne sąrašą, kad grąžintumėte JSON turinį.

 import json from django.http import HttpResponse response_data = {} response_data['result'] = 'error' response_data['message'] = 'Some error message' 

„Pre-Django 1.7“ grąžinsite jį taip:

 return HttpResponse(json.dumps(response_data), content_type="application/json") 

Jei naudojate „Django 1.7+“, naudokite „ JsonResponse , kaip parodyta šiame SO atsakyme :

 from django.http import JsonResponse return JsonResponse({'foo':'bar'}) 
809
11 марта '10 в 22:44 2010-03-11 22:44 atsakė Tomui kovo 11 d. 10 val. 10:44 2010-03-11 22:44

Nauja django 1.7

Galite naudoti „ JsonResponse“ objektus.

iš dokumentų:

 from django.http import JsonResponse return JsonResponse({'foo':'bar'}) 
139
25 июня '14 в 17:41 2014-06-25 17:41 atsakymas pateikiamas srj birželio 25, 14, 17:41 2014-06-25 17:41

Aš jį naudoju, jis puikiai veikia.

 from django.utils import simplejson from django.http import HttpResponse def some_view(request): to_json = { "key1": "value1", "key2": "value2" } return HttpResponse(simplejson.dumps(to_json), mimetype='application/json') 

Alternatyva:

 from django.utils import simplejson class JsonResponse(HttpResponse): """ JSON response """ def __init__(self, content, mimetype='application/json', status=None, content_type=None): super(JsonResponse, self).__init__( content=simplejson.dumps(content), mimetype=mimetype, status=status, content_type=content_type, ) 

„Django 1.7“ „ JsonResponse“ buvo pridėta prie „Django“ struktūros, kuri supaprastina šią užduotį:

 from django.http import JsonResponse def some_view(request): return JsonResponse({"key": "value"}) 
132
11 марта '10 в 22:55 2010-03-11 22:55 atsakymas duotas Dingo kovo 11 d., 10 val. 10:55 2010-03-11 22:55

Nuo „Django 1.7“ turite standartinį „ JsonResponse“ , būtent tai, ko jums reikia:

 from django.http import JsonResponse ... return JsonResponse(array_to_js, safe=False) 

Net nereikia json.dump savo masyvo.

23
30 окт. atsakymas pateikiamas Akhorus spalio 30 d. 2014-10-30 15:29 '14, 15:29 2014-10-30 15:29
 from django.http import HttpResponse import json class JsonResponse(HttpResponse): def __init__(self, content={}, mimetype=None, status=None, content_type='application/json'): super(JsonResponse, self).__init__(json.dumps(content), mimetype=mimetype, status=status, content_type=content_type) 

Ir pristatyme:

 resp_data = {'my_key': 'my value',} return JsonResponse(resp_data) 
15
03 мая '13 в 16:35 2013-05-03 16:35 Atsakymą pateikė Dmitrijus Demidenko gegužės 03 d. 13 val. 16:35 2013-05-03 16:35

Tiems, kurie naudojasi Django 1.7 +

 from django.http import JsonResponse def your_view(request): json_object = {'key': "value"} return JsonResponse(json_object) 

oficialius dokumentus

13
08 сент. Atsakymas duotas Andres 08 Sep. 2015-09-08 23:12 '15, 23:12, 2015-09-08 23:12

Norite naudoti django serializer dirbti su Unicode failais:

 from django.core import serializers json_serializer = serializers.get_serializer("json")() response = json_serializer.serialize(list, ensure_ascii=False, indent=2, use_natural_keys=True) return HttpResponse(response, mimetype="application/json") 
10
13 июля '12 в 15:14 2012-07-13 15:14 atsakymą pateikė „ ReduxDJ“ liepos 13 d. 12 val. 15:14 2012-07-13 15:14

Kaip naudotis „Google“ varikliu su „ajax“?

„Javascript“ kodas su „jQuery“:

 $.ajax({ url: '/ajax', dataType : 'json', cache: false, success: function(data) { alert('Load was performed.'+data.ajax_resp); } }); 

„Python“ kodas

 class Ajax(webapp2.RequestHandler): def get(self): my_response = {'ajax_resp':'Hello, webapp World!'} datos = json.dumps(my_response) self.response.headers.add_header('content-type', 'application/json', charset='utf-8') self.response.out.write(datos) 
5
11 окт. Atsakyti Samiro 11 sp 2012-10-11 07:27 '12 at 7:27 2012-10-11 07:27

Tai labai patogu „Django“ 1.7 ar naujesnei versijai, nes turite „JsonResponse“ klasę, kuri yra „HttpResponse“ poklasis.

 from django.http import JsonResponse def profile(request): data = { 'name': 'Raghav', 'location': 'India', 'is_active': False, 'count': 28 } return JsonResponse(data) 

Senesnėms „Django“ versijoms turėtumėte naudoti „HttpResponse“ objektą.

 import json from django.http import HttpResponse def profile(request): data = { 'name': 'Raghav', 'location': 'India', 'is_active': False, 'count': 28 } dump = json.dumps(data) return HttpResponse(dump, content_type='application/json') 
5
06 янв. Atsakymą pateikė Tanmay D Jan 06 2018-01-06 20:57 '18 prie 20:57 2018-01-06 20:57

Django klasės vaizdais galite rašyti:

 from rest_framework.views import APIView from rest_framework.response import Response class JsonView(APIView): def get(self, request): return Response({'some': 'data'}) 
4
07 марта '18 в 15:49 2018-03-07 15:49 atsakymas „ elim“ pateikiamas kovo 18 d. 18 val. 15:49 2018-03-07 15:49

Tai yra mano pageidaujama versija, naudojant klasę. Tiesiog subklasuokite pagrindinį vaizdą ir nepaisykite gaunamo () metodo.

 import json class MyJsonView(View): def get(self, *args, **kwargs): resp = {'my_key': 'my value',} return HttpResponse(json.dumps(resp), mimetype="application/json" ) 
3
12 окт. atsakymas droidballoon Oct 12 2012-10-12 21:53 '12 9:53 val. 2012-10-12 21:53

Django views.py kodas:

 def view(request): if request.method == 'POST': print request.body data = request.body return HttpResponse(json.dumps(data)) 

HTML kodo 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> {{data}} <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> 
3
22 дек. Rajan Mandankos atsakymas gruodžio 22 d 2014-12-22 12:10 '14, 12:10 2014-12-22 12:10

Pirma importuokite:

 from django.http import HttpResponse 

Jei jau turite JSON:

 def your_method(request): your_json = [{'key1': value, 'key2': value}] return HttpResponse(your_json, 'application/json') 

Jei gaunate JSON iš kito HTTP užklausos:

 def your_method(request): response = request.get('https://www.example.com/get/json') return HttpResponse(response, 'application/json') 
0
20 дек. atsakymą pateikė „ Sakthivel Karthikeyan “ 20 d. 2018-12-20 08:33 '18 8:33 am 2018-12-20 08:33

Rodinyje naudokite:

 form.field.errors|striptags 

gauti patvirtinimo pranešimus be html

0
15 июля '17 в 19:47 2017-07-15 19:47 Atsakymą davė Deepak Sharma , liepos 15 d. 17, 19:47 2017-07-15 19:47

Peržiūrėkite kitus klausimus apie „ žymes arba Užduokite klausimą