Подтвердить что ты не робот

Django, REST и Angular Маршруты

Я пытаюсь склонить голову к объединению клиентской структуры, такой как AngularJS с Django. Единственное, что меня пугает, - это вопрос маршрутов и REST.

Я много читал об этом в Интернете, но документация ограничена, особенно в том, что Django сочетается с Angular (небольшие фрагменты здесь или там). Я понимаю, что мне нужно добавить REST-инфраструктуру, такую ​​как TastyPie, чтобы создать надежный интерфейс REST в моем приложении, чтобы Angular подключался и хватал ресурсы.

Однако я смущен тем, как правильно отображать мои маршруты таким образом, что (1) мое приложение на стороне сервера может отображать мое одностраничное приложение (SPA) с помощью Angular, подключенного (2) маршруты, которые должны загружать шаблоны информации/вывода (angular) и извлекать данные с сервера (django), не конфликтуют. Например, если у меня есть кто-то, кто идет на моем сайте и делает site.com/user/1234 - этот маршрут связан как с маршрутом Angular, так и с маршрутом Django, за исключением того, что он отображает шаблон, а другой выплевывает JSON на основе того, что извлекается из БД/сервера.

Кроме того, с помощью REST api, я могу отказаться от множества преимуществ, которые я имею в плане синхронизации моделей ModelForm с моими моделями и т.д.? Есть ли способ сохранить это с помощью AngularJS или мне нужно взглянуть на замену AngularJS.

4b9b3361

Ответ 1

Вопрос не очень специфичен для Django - просто вопрос понимания отношений между back-end и front-end в SPA.

Маршруты не дублируются между внутренним и внешним интерфейсами. Ваши маршруты Django должны быть настроены так:

/api/foo
/api/bar
...

и один единственный маршрут, который предоставляет одну страницу с полными частицами HTML, например.

/

Остальные маршруты будут определены в Angular, например.

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

Контроллеры Angular, которые обрабатывают эти общедоступные маршруты, в свою очередь делают вызовы $http против URL-адресов API, и каждый из них будет доставлять один Angular частично. Таким образом, нет дублирования, нет дублирования.

Во вторую часть вашего вопроса вы можете использовать отношения модели Django ORM при построении данных API, но да, вы потеряете всю эту доброту Django при создании front-end.

Если вы создадите свой API правильно, все данные, которые вам нужны в каждом представлении, будут полностью присутствовать в канале JSON, который Angular потребляет в этом представлении. Таким образом, вы используете ORM для создания данных на заднем плане, но вы не можете просто решить пересечь модельные отношения в шаблоне без предварительной подготовки исходных данных для предоставления данных для него.

Да, это совсем другой способ думать о вещах, и да, это немного сложнее, чем прямое Django (или Rails). Это стоимость создания веб-приложения, а не веб-сайта.