django json tastypie

Django-tastypie. Salida en JSON al navegador por defecto



install django tastypie (5)

A partir de la versión 0.9.13 de tastypie, si no necesita compatibilidad con XML, puede deshabilitarlo globalmente configurando TASTYPIE_DEFAULT_FORMATS en solo [''json''] en su archivo settings.py . Las solicitudes deben ser predeterminadas a JSON.

Veo ''Lo siento, no implementado todavía. Agregue "? Format = json" a su URL. '' Siempre necesito añadir la cadena "? Format = json". ¿Puedo hacer una salida en JSON por defecto?

Saludos, vitalidad


Desde el libro de recetas de tastypie , para cambiar el formato predeterminado, necesita anular el método determin_format () en su ModelResource:

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

El enlace anterior muestra métodos alternativos para determinar el formato de salida.

Además, no creo que una respuesta válida sea esencialmente "No necesitas esto".

Editar

Parece que la respuesta de GregM es probablemente (no la he probado) la más correcta con la nueva versión de TastyPie, según la documentación que pone a continuación en su settings.py restringirá la salida de serialización a json.

TASTYPIE_DEFAULT_FORMATS = [''json'']


He probado la configuración de TASTYPIE_DEFAULT_FORMATS en [''json''] pero no impide que aparezca el mensaje "Lo sentimos, no estoy implementado todavía" al ver la API desde un navegador.

Puedo hacer que esa advertencia desaparezca forzando el encabezado "Aceptar" a ''application / json'' en un middleware:

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''


Para examinar / probar su API REST, use un cliente Rest en lugar de un navegador, preferiblemente uno que sepa cómo imprimir bastante JSON. Yo uso el plugin Postman para Google Chrome.

Si quieres bonito json en línea de comandos:

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


Tasytpie tiene los valores predeterminados establecidos como ''application / json''. Pero eso se anula por solicitud del navegador.

De acuerdo con Tastypie, el encabezado de solicitud ACEPTA y su especificación de formato en GET, por ejemplo, reemplaza el valor predeterminado. ? format = json . Cuando envías una solicitud desde los navegadores, si ves que se envía el encabezado HTTP de la solicitud, es algo así como:

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

La aplicación / xml anula el valor predeterminado en Tastypie Resource. Por lo tanto, puede configurar el encabezado del navegador para que tenga ''application / json'' (mala idea) o simplemente especifique en GET.

Si llega a la misma URL de la API utilizando CURL, verá la salida JSON sin especificar eso en GET.