Django-tastypie. Вывод в JSON в браузер по умолчанию - PullRequest
24 голосов
/ 28 декабря 2011

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

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

Ответы [ 5 ]

41 голосов
/ 12 февраля 2013

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

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

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

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

Редактировать

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

 TASTYPIE_DEFAULT_FORMATS = ['json']
10 голосов
/ 21 мая 2013

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

2 голосов
/ 14 июня 2013

Я проверил установку TASTYPIE_DEFAULT_FORMATS на ['json'], но это не мешает сообщению «Извините, еще не реализовано» при просмотре API из браузера.

I am возможность убрать это предупреждение, установив заголовок «Accept» в «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'
1 голос
/ 29 октября 2012

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

Согласно Tastypie, значение по умолчанию переопределяется на Заголовок запроса ПРИНЯТЬ и спецификация вашего формата в GET , т.е. ? = Формат JSON . Когда вы отправляете запрос из браузеров, если вы видите отправленный HTTP-заголовок запроса, это что-то вроде -

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

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

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

1 голос
/ 02 января 2012

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

Если вы хотите симпатичного json в командной строке:

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