Я пытаюсь преобразовать серверный сценарий ответа Ajax в Django HttpResponse, но, видимо, он не работает.
Это серверный скрипт:
/* 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))
Я использую simplejson для кодирования списка Python (чтобы он возвращал массив JSON). Я еще не мог понять проблему. Но я думаю, что я сделал что-то не так с «эхо».
@ajax_request
.Ответы:
Я обычно использую словарь, а не список для возврата содержимого JSON.
Pre-Django 1.7 вы бы вернули его так:
Для Django 1.7+ используйте
JsonResponse
как показано в этом SO ответе так:источник
Новое в Джанго 1,7
Вы можете использовать объекты JsonResponse .
из документов:
источник
ensure_ascii
и я еще не нашел способ переопределить его. Создан новый вопрос для этого: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(требуется Django 1.9 или новее)Я использую это, он отлично работает.
Альтернатива:
В Django 1.7 объекты JsonResponse были добавлены в сам фреймворк Django, что делает эту задачу еще проще:
источник
from django.utils import simplejson
для обратной совместимости.JsonResponse(status=404, data={'status':'false','message':message})
Начиная с Django 1.7 у вас есть стандартный JsonResponse, который именно то, что вам нужно:
Вам даже не нужно json.dump вашего массива.
источник
И в представлении:
источник
Для тех, кто использует Django 1.7+
официальные документы
источник
Вы захотите использовать сериализатор django для помощи с юникодом:
источник
С помощью представлений на основе классов Django вы можете написать:
а с Django-Rest-Framework вы можете написать:
источник
Это очень удобно для Django версии 1.7 или выше, поскольку у вас есть класс JsonResponse, который является подклассом HttpResponse.
Для более старых версий Django вы должны использовать объект HttpResponse.
источник
Как использовать Google App Engine с AJAX (JSON)?
Код Javascript с помощью JQuery:
Код Python
источник
Это моя предпочтительная версия, использующая представление на основе классов. Просто создайте подкласс базового View и переопределите метод get ().
источник
Код Джанго
views.py
:HTML код
view.html
:источник
Сначала импортируйте это:
Если у вас уже есть JSON:
Если вы получаете JSON из другого HTTP-запроса:
источник
Используйте JsonResponse
источник
В представлении использовать это:
для получения проверочных сообщений без HTML
источник