Création d'une réponse JSON à l'aide de Django et Python : résolution des problèmes de conversion
Dans le but de traduire un script de réponse Ajax côté serveur en Django HttpResponse, vous avez rencontré un problème. Le script côté serveur d'origine :
// 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. } } }
Le code Django converti :
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))
Le problème réside dans votre choix de structure de données pour renvoyer le contenu JSON. Au lieu d’utiliser une liste, il est recommandé d’utiliser un dictionnaire. Voici une version améliorée utilisant un dictionnaire :
import json from django.http import HttpResponse response_data = {} response_data['result'] = 'error' response_data['message'] = 'Some error message' if vld_value == "TestUser": response_data['result'] = 'success' response_data['message'] = 'Validation successful' return HttpResponse(json.dumps(response_data), content_type='application/json')
N'oubliez pas que lorsque vous utilisez Django 1.7 ou version ultérieure, vous pouvez utiliser la classe JsonResponse pour une réponse simplifiée :
from django.http import JsonResponse response_data = { 'result': 'error' if vld_value != 'TestUser' else 'success', 'message': 'Error message' if vld_value != 'TestUser' else 'Validation successful' } return JsonResponse(response_data)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!