with tutorial latest framework espaƱol desde con cero applications python django apache rest

python - tutorial - Agregar REST a Django



tutorial django (11)

Estoy pensando en volver a simplemente escribir funciones de vista en Django que devuelven resultados JSON.

Yo iría con eso ...
Ali A lo resumió bastante bien.

El punto principal para mí es ser explícito. Evitaría usar una función que convierte automáticamente un objeto en json, ¿qué pasa si el objeto tiene una referencia a un usuario y, de alguna manera, la contraseña (incluso si es hash) va al json snippit?

Tengo una aplicación de Django que funciona bien. Estoy agregando servicios REST. Estoy buscando información adicional sobre mi estrategia REST.

Aquí hay algunos ejemplos de cosas que me estoy estrujando las manos.

  • En este momento, estoy usando la API Django-REST con una pila de parches.
  • Estoy pensando en volver a simplemente escribir funciones de vista en Django que devuelven resultados JSON.
  • También puedo ver el filtrado de las solicitudes REST en Apache y enrutarlas a una instancia de servidor distinta, no de Django.

Por favor, nomine un enfoque por respuesta para que podamos votarlos hacia arriba o hacia abajo.


Estoy pensando en volver a simplemente escribir funciones de vista en Django que devuelven resultados JSON.

  • Explícito
  • Portátil a otros marcos
  • No requiere parchear Django

Deseche la API de Django REST y proponga su propio proyecto de código abierto para que otros puedan contribuir. Estaría dispuesto a contribuir. Tengo un código que se basa en los formularios api para hacer REST.



Puedes echar un vistazo a django-dynamicresponse , que es un marco liviano para agregar REST API con JSON a tus aplicaciones de Django.

Requiere cambios mínimos para agregar soporte API a las aplicaciones existentes de Django, y hace que sea sencillo incorporar API desde el principio en nuevos proyectos.

Básicamente, incluye soporte de middleware para analizar JSON en request.POST, además de serializar el contexto devuelto a JSON o renderizar una plantilla / redirigir condicionalmente según el tipo de solicitud.


TastyPie parece bastante interesante y prometedor. Va bien con Django.


Tenga en cuenta que REST no solo significa resultados JSON. REST esencialmente significa exponer una API orientada a recursos sobre HTTP nativo pero completo. No soy un experto en REST, pero aquí están algunas de las cosas que está haciendo Rails.

  • Las URL deben ser nombres buenos y simples para los recursos
  • Usa los métodos HTTP correctos
    • HEAD, GET, POST, PUT y DELETE
    • Opcionalmente con una anulación (el parámetro de formulario ''_method'' anulará el método de solicitud HTTP)
  • Admite la negociación de tipo de contenido a través de Aceptar encabezado de solicitud
    • Opcionalmente con una anulación (la extensión de nombre de archivo en la URL anulará el tipo MIME en el encabezado de solicitud Aceptar)
    • Los tipos de contenido disponibles deben incluir XML, XHTML, HTML, JSON, YAML y muchos otros, según corresponda.

Por ejemplo, para que el soporte HTTP nativo funcione, el servidor debe responder

GET /account/profile HTTP/1.1 Host: example.com Accept: application/json

como respondería a

GET /account/profile.json HTTP/1.1 Host: example.com

Y debe responder a

PUT /account/profile HTTP/1.1 Host: example.com var=value

como respondería a

POST /account/profile HTTP/1.1 Host: example.com _method=PUT&var=value


Terminé yendo con mi propio marco REST API para Django (que me encantaría eliminar si puedo encontrar una alternativa viable), con algunas vistas personalizadas para los casos de esquina con los que no quería tratar. Funcionó bien.

Entonces una combinación de 1 y 2; sin algún tipo de marco, terminará escribiendo el mismo texto estándar para los casos comunes.

También hice algunas API independientes. Me gusta tenerlos como servicios independientes, pero el solo hecho de que se mantengan solos del resto del código los lleva a ser descuidados. Sin razón técnica; simplemente fuera de la vista, fuera de la mente.

Lo que realmente me gustaría ver es un enfoque que unifique los formularios Django y las API REST, ya que a menudo comparten mucha lógica. Conceptualmente, si su aplicación expone algo en HTML, es probable que quiera exponerlo también programáticamente.


podría tratar de hacer funciones genéricas que procesen los datos (como parand y mencionó) a los que puede llamar desde las vistas que generan las páginas web, así como aquellas que generan json / xml / whatever


Tastypie es también un nuevo marco REST emergente para Django. Tiene la misma forma de pensar que los pistones y elimina una gran cantidad de códigos repetitivos.


Para cualquier otra persona que busque una aplicación API decente y decente para Django, asegúrese de comprar el django-piston jespern que se usa internamente en BitBucket.

Está bien mantenido, tiene una gran cantidad de seguidores y algunos tenedores geniales que hacen cosas como agregar soporte para paginación y otros métodos de autenticación (OAuth es compatible de forma inmediata).

Actualizado para reflejar que django-piston ya no se mantiene.