2010-06-08 2 views
1

Я хочу знать правильный способ структурирования представлений ajax в django.django: ajax view structure

сказать я сделать что-то вроде:

def foo_json(request): 
    if is_ajax(): 
     # return JSON here 

и сделать его доступным в качестве ресурса на что-то вроде '/ Foo/данные /' ..

все прекрасно ..

но если я указываю браузер на «/ Foo/данных /» .., очевидно, я получаю сообщение об ошибке (отладки), как: app.views.foo_json didn't return an HttpResponse object.

так ... мой вопрос:

Какова наилучшая структура структуры такого вида?

..should Я возвращаю код ответа HTTP ..maybe 404/405 ... или что-то еще? - не уверен, что лучший способ справиться с этим, любые советы оценили :)

EDIT: ..следующие потребительная случай, который вызвал этот вопрос был Аякса вид PROXY:

def foo_proxy(request): 
    if is_ajax(): 
     # proxy external URL 
     # return resource 
    else: 
     # ? do what with browser request 

ответ

2

Есть веские причины для проверки is_ajax, для одного это хороший способ, чтобы воспользоваться политикой междоменной.

В этом случае я бы вернуть 403 - Forbidden. Обратите внимание: 403 не имеет никакого отношения к авторизации - это подтверждение, которое вы получили и поняли в запросе, и отказываетесь возвращать что-либо, что точно соответствует вашему намерению. При желании вы можете указывать причину, почему запрос будет отклонен:

Вы можете использовать параметр состояния, чтобы установить статус на регулярный HttpResponse объекта, или использовать HttpResponseForbidden подкласса:

return HttpResponseForbidden("Request must be a valid XMLHttpRequest") 

Лично я, как правило, повторно использовать те же представления, чтобы служить либо шаблону для обычного GET, либо JSON для запроса ajax. Я не знаю, подумаю ли я, что это лучшая практика или что-то еще, это просто то, что нужно для моих проектов.

0

Если вы не знаете, что вы хотите в предложении else, вы уверены, что вам нужно, если? Зачем тестировать is_ajax? Почему бы просто не вернуть данные JSON в браузер?

+0

хорошая точка :) ..но я имел в виду это как общий вопрос - иногда это может быть целесообразно - держать вещи в чистоте на веб-интерфейсе, когда javacsript отключен ... - Я не всегда хочу вернуться НИЧЕГО, если запрос не Аякса ... но, может быть, мое мышление замешано. – zack

Смежные вопросы