tutorial retrievemodelmixin framework example django rest angularjs routes

retrievemodelmixin - Django, REST y Rutas Angulares.



django rest framework retrievemodelmixin (1)

Estoy tratando de envolver mi cabeza alrededor de un marco del lado del cliente como AngularJS con Django. Una cosa que realmente me confunde es el tema de las rutas y REST.

He intentado leer mucho al respecto en línea, pero la documentación es limitada, especialmente en términos de la combinación de Django con Angular (pequeños fragmentos aquí o allá). Entiendo que necesito agregar un marco REST como TastyPie para crear una interfaz REST robusta en mi aplicación para que Angular se conecte y obtenga recursos.

Sin embargo, estoy confundido en cuanto a cómo asignar correctamente mis rutas de tal manera que (1) mi aplicación del lado del servidor pueda renderizar mi aplicación de una sola página (SPA) con las rutas angulares conectadas (2) que se supone que deben cargue información / genere plantillas (angular) y recupere datos del servidor (django) no entre en conflicto. Como si alguien estuviera en mi sitio web y haciendo site.com/user/1234, esa ruta está asociada tanto con la ruta Angular como con la ruta Django, excepto que una muestra una plantilla y la otra escupe JSON en función de lo que se recupera de El DB / servidor.

Además, al usar la API REST, ¿renuncio a muchas de las ventajas que tengo en cuanto a tener ModelForms sincronizados con mis Modelos, etc.? ¿Hay alguna manera de mantener esto con AngularJS o tengo que mirar hacia un sustituto de AngularJS?


La pregunta no es realmente específica para Django, solo es una cuestión de entender la relación entre back-end y front-end en un SPA.

Las rutas no se duplican entre el back-end y el front-end. Tus rutas Django deben configurarse como:

/api/foo /api/bar ...

y una sola ruta que ofrece una sola página llena de parciales HTML, por ejemplo,

/

El resto de las rutas se definirán en Angular, por ejemplo,

/articles/234 /blog/date/slug ...

Los controladores Angular que manejan esas rutas de acceso público, a su vez, realizarán llamadas $ http contra las URL de la API y cada una entregará un Angular parcial. Así que no hay duplicación, no hay superposición.

A la segunda parte de su pregunta, aún puede usar las relaciones del modelo Django ORM al construir sus datos de API, pero sí, perderá toda esa bondad de Django cuando construya el front-end.

Si crea su API correctamente, todos los datos que necesita en cada vista estarán presentes en la fuente JSON que Angular consume en esa vista. Por lo tanto, está utilizando el ORM para la construcción de datos de back-end, pero no puede simplemente decidir atravesar una relación de modelo en una plantilla sin preparar primero los datos de back-end para proporcionar datos para ello.

Sí, es una forma muy diferente de pensar las cosas, y sí, es un poco más complejo que hacer Django (o Rails) directo. Ese es el costo de crear una aplicación web en lugar de un sitio web.