Я вижу "Извините, еще не реализовано. Добавьте"? Format = json" в ваш URL. '. Мне всегда нужно добавить строку "? Format = json". Могу ли я сделать вывод в JSON по умолчанию?
С уважением, Виталий
Я вижу "Извините, еще не реализовано. Добавьте"? Format = json" в ваш URL. '. Мне всегда нужно добавить строку "? Format = json". Могу ли я сделать вывод в JSON по умолчанию?
С уважением, Виталий
Из 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']
Как и tastypie 0.9.13, если вам не нужна поддержка XML, вы можете отключить ее по всему миру, установив TASTYPIE_DEFAULT_FORMATS
только ['json']
в вашем файле settings.py
. Затем запросы должны быть по умолчанию для JSON.
Я тестировал настройку 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'
Чтобы проверить/протестировать свой REST API, используйте клиент Rest вместо браузера, предпочтительно тот, который знает, как красиво печатать JSON. Я использую плагин Postman для Google Chrome.
Если вам нужна команда json в командной строке:
curl https://api.twitter.com/1.1/search/tweets.json | python -m json.tool
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.