Estou tentando converter um script de resposta Ajax do servidor em um Django HttpResponse, mas aparentemente não está funcionando.
Este é o script do lado do servidor:
/* 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.
}
}
}
E este é o código convertido
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))
Estou usando simplejson para codificar a lista Python (portanto, ele retornará uma matriz JSON). Ainda não consegui descobrir o problema. Mas acho que fiz algo errado sobre o 'eco'.
@ajax_request
.Respostas:
Normalmente, uso um dicionário, não uma lista para retornar o conteúdo JSON.
Antes do Django 1.7, você retornaria assim:
Para o Django 1.7+, use
JsonResponse
como mostrado nesta resposta do SO da seguinte maneira:fonte
Novo no django 1.7
você poderia usar objetos JsonResponse .
dos documentos:
fonte
ensure_ascii
e ainda não encontrei uma maneira de substituí-lo. Criou uma nova pergunta para isso: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(requer Django 1.9 ou mais recente)Eu uso isso, funciona bem.
Alternativa:
No Django 1.7, os objetos JsonResponse foram adicionados à estrutura do Django, o que facilita ainda mais esta tarefa:
fonte
from django.utils import simplejson
é para compatibilidade com versões anteriores.JsonResponse(status=404, data={'status':'false','message':message})
Desde o Django 1.7, você tem um JsonResponse padrão que é exatamente o que você precisa:
Você nem precisa json.dump sua matriz.
fonte
E na visão:
fonte
Para quem usa o Django 1.7+
documentos oficiais
fonte
Você vai querer usar o serializador do django para ajudar com coisas unicode:
fonte
Com as visualizações baseadas na classe Django, você pode escrever:
e com o Django-Rest-Framework você pode escrever:
fonte
É muito conveniente com o Django versão 1.7 ou superior, pois você tem a classe JsonResponse, que é uma subclasse do HttpResponse.
Para versões mais antigas do Django, você deve usar um objeto HttpResponse.
fonte
Como usar o google app engine com ajax (json)?
Código Javascript com JQuery:
Code Python
fonte
Esta é minha versão preferida usando uma exibição baseada em classe. Basta subclassificar a View básica e substituir o método get () -.
fonte
Código Django
views.py
:Código HTML
view.html
:fonte
Primeiro importe isso:
Se você já possui o JSON:
Se você obtiver o JSON de outra solicitação HTTP:
fonte
Use JsonResponse
fonte
No modo de exibição, use isto:
para obter mensagens de validação sem html
fonte