La désérialisation JSON dans Django
Celui-ci a m'a fait m'arracher les cheveux. J'ai essayé de désérialiser JSON dans Django pour les deux dernières heures.
J'ai une fonction:
# in index.html
function updateWidgetData(){
var items=[];
for statement here:
for statement here:
var item={
id: $j(this).attr('id'),
collapsed: collapsed,
order : i,
column: columnId
};
items.push(item);
var sortorder={ items: items};
$j.post('2', 'data='+$j.toJSON(sortorder), function(response)
{
if(response=="success")
$j("#console").html('<div class="success">Saved</div>').hide().fadeIn(1000);
setTimeout(function(){
$j('#console').fadeOut(1000);
}, 2000);
});
}
Et je suis en train de désérialiser le JSON dans django:
# in views.py
if request.is_ajax():
for item in serializers.deserialize("json", request.content):
item = MyObject(id=id, collapsed=collapsed, order=order, column=column)
return HttpResponse("success")
else:
....
Et il n'a pas travaillé. Je sais que c'est probablement vraiment une question triviale, mais je n'ai jamais utilisé JSON avant, et j'apprécierais vraiment de l'aide. Merci!
"Et il n'a pas été de travail" - où ne fonctionne pas? L'explosion dans la Django vue? Une stacktrace/message d'erreur va nous aider à vous aider
Le JS, en cas de succès, montre une div appelé console qui clignote le message "sauvé". Il n'a pas été de montrer, me faire supposer que Django n'est pas l'envoi de la HttpResponse à cause d'une erreur. Je pense qu'il n'y a pas un django page d'erreur qui s'affiche parce que c'est de l'ajax et il ne va pas mettre en place un autre modèle.
Vous pouvez utiliser Firebug ou Google Chrome developer tools pour voir le retour de la page (page d'erreur).
+1 pour le titre, facile à trouver.
Le JS, en cas de succès, montre une div appelé console qui clignote le message "sauvé". Il n'a pas été de montrer, me faire supposer que Django n'est pas l'envoi de la HttpResponse à cause d'une erreur. Je pense qu'il n'y a pas un django page d'erreur qui s'affiche parce que c'est de l'ajax et il ne va pas mettre en place un autre modèle.
Vous pouvez utiliser Firebug ou Google Chrome developer tools pour voir le retour de la page (page d'erreur).
+1 pour le titre, facile à trouver.
OriginalL'auteur Temuz | 2011-06-17
Vous devez vous connecter pour publier un commentaire.
serializers.deserialize
est pour la désérialisation d'un type particulier de JSON - c'est-à-dire les données qui a été sérialisé à partir d'instances de modèle à l'aide deserializers.serialize
. Pour vos données, vous voulez juste la normesimplejson
module.Et la deuxième chose de mal, c'est que votre réponse n'est pas seulement JSON - c'est un HTTP POST avec JSON dans le
data
champ. Donc:Et, bien sûr, il devrait être
request.POST['data']
(modifié ci-dessus).Oh, oups! N'a pas pris. Merci beaucoup, je l'apprécie!
Depuis Django 1.5 vous préférez utiliser le python
json
moduleDjango expose publier des données envoyées en tant que application/json " dans le domaine
request.body
- je ne suis pas sûr si c'est un changement récent ou tout simplement parce que de l'encodage.OriginalL'auteur Daniel Roseman
Les objets doivent maintenant être enregistrées et visibles dans django admin
OriginalL'auteur Arpit Singh