J'essaie de convertir un script de réponse Ajax côté serveur en Django HttpResponse, mais apparemment, cela ne fonctionne pas.
Voici le script côté serveur:
/* 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.
}
}
}
Et voici le code 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))
J'utilise simplejson pour encoder la liste Python (il retournera donc un tableau JSON). Je ne pouvais pas encore comprendre le problème. Mais je pense que j'ai fait quelque chose de mal à propos de «l'écho».
@ajax_request
.Réponses:
J'utilise généralement un dictionnaire, pas une liste pour renvoyer du contenu JSON.
Avant Django 1.7, vous le renverriez comme ceci:
Pour Django 1.7+, utilisez
JsonResponse
comme indiqué dans cette réponse SO comme ceci:la source
Nouveau dans Django 1.7
vous pouvez utiliser des objets JsonResponse .
à partir des documents:
la source
ensure_ascii
et je n'ai pas encore trouvé de moyen de le contourner. Créé une nouvelle question pour ceci: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(nécessite Django 1.9 ou plus récent)J'utilise ça, ça marche bien.
Alternative:
Dans Django 1.7, des objets JsonResponse ont été ajoutés au framework Django lui-même, ce qui rend cette tâche encore plus facile:
la source
from django.utils import simplejson
c'est pour une compatibilité descendante.JsonResponse(status=404, data={'status':'false','message':message})
Depuis Django 1.7, vous disposez d'une JsonResponse standard, c'est exactement ce dont vous avez besoin:
Vous n'avez même pas besoin de json.dump votre tableau.
la source
Et dans la vue:
la source
Pour ceux qui utilisent Django 1.7+
documents officiels
la source
Vous voudrez utiliser le sérialiseur django pour vous aider avec les trucs unicode:
la source
Avec les vues basées sur la classe Django, vous pouvez écrire:
et avec Django-Rest-Framework, vous pouvez écrire:
la source
C'est très pratique avec Django version 1.7 ou supérieure car vous avez la classe JsonResponse, qui est une sous-classe de HttpResponse.
Pour les anciennes versions de Django, vous devez utiliser un objet HttpResponse.
la source
Comment utiliser le moteur d'application Google avec Ajax (JSON)?
Code Javascript avec JQuery:
Code Python
la source
Ceci est ma version préférée utilisant une vue basée sur une classe. Il suffit de sous-classer la vue de base et de remplacer la méthode get ().
la source
Code Django
views.py
:Code HTML
view.html
:la source
Importez d'abord ceci:
Si vous avez déjà le JSON:
Si vous obtenez le JSON d'une autre requête HTTP:
la source
Utiliser JsonResponse
la source
Dans View, utilisez ceci:
pour obtenir des messages de validation sans html
la source