Подтвердить что ты не робот

Django-tastypie. Вывод в JSON в браузер по умолчанию

Я вижу "Извините, еще не реализовано. Добавьте"? Format = json" в ваш URL. '. Мне всегда нужно добавить строку "? Format = json". Могу ли я сделать вывод в JSON по умолчанию?

С уважением, Виталий

4b9b3361

Ответ 1

Из tastypie cookbook, чтобы изменить формат по умолчанию, вам необходимо переопределить метод define_format() на вашем ModelResource:

class MyResource(ModelResource):
    ....
    def determine_format(self, request):
        return 'application/json'

Вышеупомянутая ссылка демонстрирует альтернативные методы определения формата вывода.

Кроме того, я не думаю, что правильный ответ по существу "вам это не нужно".

Edit

Похоже, что ответ GregM, вероятно, (я его не тестировал) наиболее корректен с новой версией TastyPie, согласно документации, следующее в вашем settings.py ограничит вывод сериализации на json.

 TASTYPIE_DEFAULT_FORMATS = ['json']

Ответ 2

Как и tastypie 0.9.13, если вам не нужна поддержка XML, вы можете отключить ее по всему миру, установив TASTYPIE_DEFAULT_FORMATS только ['json'] в вашем файле settings.py. Затем запросы должны быть по умолчанию для JSON.

Ответ 3

Я тестировал настройку TASTYPIE_DEFAULT_FORMATS на ['json'], но при просмотре API из браузера он не предотвращает сообщение "Извините, не реализовано".

Я могу заставить это предупреждение уйти, заставив заголовок "Принять" в "application/json" в промежуточном программном обеспечении:

class TastyJSONMiddleware(object):
    """
    A Django middleware to make the Tastypie API always output in JSON format
    instead of telling browsers that they haven't yet implemented text/html or
    whatever.

    WARNING: This includes a hardcoded url path for /api/.  This is not 'DRY'
    because it means you have to edit two places if you ever move your API
    path.
    """

    api_prefix = '/api/'

    def process_request(self, request):
        if request.path.startswith(self.api_prefix):
            request.META['HTTP_ACCEPT'] = 'application/json'

Ответ 4

Чтобы проверить/протестировать свой REST API, используйте клиент Rest вместо браузера, предпочтительно тот, который знает, как красиво печатать JSON. Я использую плагин Postman для Google Chrome.

Если вам нужна команда json в командной строке:

curl https://api.twitter.com/1.1/search/tweets.json | python -m json.tool

Ответ 5

Tasytpie имеет значения по умолчанию, заданные как "application/json". Но это переопределяется запросом браузера.

В соответствии с Tastypie значение по умолчанию переопределяется заголовком запроса ACCEPT и ваша спецификация формата GET.? = Формат JSON. Когда вы отправляете запрос от браузеров, если вы видите отправленный HTTP-заголовок запроса, то что-то вроде

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

application/xml переопределяет значение по умолчанию в ресурсе Tastypie. Таким образом, вы можете установить заголовок браузера, чтобы иметь "приложение/json" ( "Плохая идея" ), или вы просто указываете в GET.

Если вы нажмете тот же URL-адрес API, используя CURL, вы увидите вывод JSON без указания этого в GET.