django: структура представления ajax - PullRequest
1 голос
/ 08 июня 2010

Я хочу знать, как правильно структурировать представления ajax в django.

скажи, что я делаю что-то вроде:

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

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

все хорошо ..

но если я укажу браузеру на '/ foo / data /' .. очевидно, я получу ошибку (отладку), такую ​​как: app.views.foo_json didn't return an HttpResponse object.

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

Как лучше всего структурировать такой вид?

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

РЕДАКТИРОВАТЬ: .. вариант использования, который вызвал этот вопрос, был ajax ПРОКСИ:

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

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

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

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

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

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

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

0 голосов
/ 08 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...