জ্যাঙ্গো এবং পাইথন ব্যবহার করে একটি জেএসএন প্রতিক্রিয়া তৈরি করা হচ্ছে


450

আমি একটি সার্ভার সাইড অ্যাজাক্স প্রতিক্রিয়া স্ক্রিপ্টকে জ্যাঙ্গো এইচটিপিআরস্পোনসে রূপান্তর করার চেষ্টা করছি, তবে দৃশ্যত এটি কাজ করছে না।

এটি সার্ভার-সাইড স্ক্রিপ্ট:

/* RECEIVE VALUE */
$validateValue=$_POST['validateValue'];
$validateId=$_POST['validateId'];
$validateError=$_POST['validateError'];

/* RETURN VALUE */
$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.
        }
    }
}

এবং এটি রূপান্তরিত কোড

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))

পাইথন তালিকার এনকোড করার জন্য আমি সিম্পজসন ব্যবহার করছি (যাতে এটি একটি জেএসএন অ্যারে ফিরিয়ে দেবে)। আমি এখনও সমস্যাটি বুঝতে পারি না। তবে আমি মনে করি যে আমি 'প্রতিধ্বনি' সম্পর্কে কিছু ভুল করেছি।


আপনি জাঙ্গো-বিরক্তিকর দর্শন সজ্জা ব্যবহার করতে পারেন @ajax_request
zopieux

উত্তর:


916

আমি সাধারণত ডিকশনারি ব্যবহার করি, জেএসওএন বিষয়বস্তু ফেরার জন্য কোনও তালিকা নয়।

import json

from django.http import HttpResponse

response_data = {}
response_data['result'] = 'error'
response_data['message'] = 'Some error message'

প্রাক-জ্যাঙ্গো 1.7 আপনি এটির মতো এটি ফিরে পাবেন:

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

জাজানো ১.7++ এর জন্য, এই এসও উত্তরেJsonResponse যেমন দেখানো হয়েছে তেমন ব্যবহার করুন :

from django.http import JsonResponse
return JsonResponse({'foo':'bar'})

4
এটা তোলে হয় MimeType না তালিকা তাঁর কষ্ট পাচ্ছেন দিতে হবে। বেশিরভাগ জেএসওএন সাধারণত শীর্ষ স্তরের একটি অবজেক্ট ("অভিধান") থাকে তবে জেএসএন শীর্ষ স্তরের অ্যারে নিয়ে পুরোপুরি খুশি।
থানাটোস

6
দুঃখিত, আমি যা লিখেছি তা থেকে এটি স্পষ্ট নয়, তবে কেবলমাত্র আমি বলতে চাইছিলাম যে আমি একটি অভিধান ব্যবহার করি কারণ এটি ক্লিনার / ইজিএসনে সিরিয়াল করার সময় সহজতর easier
টম

'অ্যাপ্লিকেশন / জেসন' আইই এর পুরানো সংস্করণগুলিতে সঠিকভাবে সমর্থিত নয়। এখানে github.com/blueimp/jQuery-File-Upload/issues/123
বিজয়

161

জাজানোতে নতুন

আপনি JsonResponse অবজেক্ট ব্যবহার করতে পারেন ।

ডক্স থেকে:

from django.http import JsonResponse
return JsonResponse({'foo':'bar'})

2
একটি খারাপ দিক: এটি ডিফল্ট ensure_asciiএবং আমি এটির ওভাররাইড করার কোনও উপায় খুঁজে পাই না। : এই একটি নতুন প্রশ্ন তৈরি হয়েছে stackoverflow.com/q/34798703/854477
int_ua

@ আইট_আউ: শুধু যুক্ত করুন json_dumps_params={"ensure_ascii": False}(জ্যাঙ্গো 1.9 বা আরও নতুন প্রয়োজন)
মার্টিজন পিটার

139

আমি এটি ব্যবহার করি, এটি দুর্দান্ত কাজ করে।

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')

বিকল্প:

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,
        )

জাজানোতে ১.7 জাসনরেস্পোনস বস্তুগুলি নিজেই জ্যাঙ্গো কাঠামোর সাথে যুক্ত করা হয়েছে যা এই কাজটিকে আরও সহজ করে তুলেছে :

from django.http import JsonResponse
def some_view(request):
    return JsonResponse({"key": "value"})

1
সমস্যা এখানে এটি না vld_value = request.POST.get ( 'validateValue') ইনপুট ফিল্ড থেকে মান হচ্ছে
সুইচ

2
অজগর ২.7 দিয়ে এটি কেবল "আমদানি জেসন" হওয়া উচিত
কুলেন ফ্লফি জেনিংস

1
আমি মনে করি from django.utils import simplejsonপিছনের সামঞ্জস্যের জন্য।
স্কাইলার সেভল্যান্ড

JsonResponse(status=404, data={'status':'false','message':message})
বেলটার

25

জ্যাঙ্গো ১.7 যেহেতু আপনার কাছে একটি স্ট্যান্ডার্ড জসনরেসপনস রয়েছে যা ঠিক আপনার প্রয়োজন:

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

আপনার অ্যারে json.dump করার দরকার নেই।


16
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)

এবং দেখুন:

resp_data = {'my_key': 'my value',}
return JsonResponse(resp_data)


11

আপনি ইউনিকোড স্টাফগুলিতে সহায়তা করার জন্য জাজানো সিরিয়ালাইজারটি ব্যবহার করতে চাইবেন:

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")

2
এটি আমার পছন্দসই সংস্করণ, তবে বুঝতে পেরেছিল যে এটি কেবল জ্যাঙ্গো কোয়েরিশেটই খায়
patroqueeet

10

জাজানো ক্লাস-ভিত্তিক দর্শনগুলির সাথে আপনি লিখতে পারেন:

from django.views import View
from django.http import JsonResponse

class JsonView(View):
    def get(self, request):
        return JsonResponse({'some': 'data'})

এবং জ্যাঙ্গো-রেস্ট-ফ্রেমওয়ার্কের সাহায্যে আপনি লিখতে পারেন:

from rest_framework.views import APIView
from rest_framework.response import Response

class JsonView(APIView):
    def get(self, request):
        return Response({'some': 'data'})

6

এটি জ্যাশনারেস্পোনস ক্লাস হওয়ায় এটি জ্যাঙ্গো সংস্করণ ১.7 বা তার চেয়ে বেশি এর সাথে জঞ্জাল সংস্করণটি খুব সুবিধাজনক, এটি এইচটিটিপ্রেসপনসের একটি সাবক্লাস।

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

জ্যাঙ্গোর পুরানো সংস্করণগুলির জন্য আপনাকে অবশ্যই একটি HTTPResponse অবজেক্ট ব্যবহার করতে হবে।

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')

6

অ্যাজাক্স (জসন) দিয়ে গুগল অ্যাপ ইঞ্জিন কীভাবে ব্যবহার করবেন?

JQuery সহ কোড জাভাস্ক্রিপ্ট:

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

কোড পাইথন

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)

4

এটি ক্লাস ভিত্তিক ভিউ ব্যবহার করে আমার পছন্দের সংস্করণ। কেবলমাত্র বেসিক ভিউ সাবক্লাস করুন এবং গেট () - পদ্ধতিটি ওভাররাইড করুন।

import json

class MyJsonView(View):

    def get(self, *args, **kwargs):
        resp = {'my_key': 'my value',}
        return HttpResponse(json.dumps(resp), mimetype="application/json" )

4

জ্যাঙ্গো কোড views.py:

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

এইচটিএমএল কোড 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>

4

প্রথমে এটি আমদানি করুন:

from django.http import HttpResponse

আপনার যদি ইতিমধ্যে JSON থাকে:

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

আপনি যদি অন্য কোনও এইচটিটিপি অনুরোধ থেকে জেএসওএন পান:

def your_method(request):
    response = request.get('https://www.example.com/get/json')
    return HttpResponse(response, 'application/json')


1

দেখুন এটিকে ব্যবহার করুন:

form.field.errors|striptags

এইচটিএমএল ছাড়াই বৈধতা বার্তা পাওয়ার জন্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.