Каковы наилучшие методы использования AngularJS с Django

Я собираюсь запустить проект с AngularJS для клиентской стороны и Django для серверной части.

Каковы наилучшие методы, чтобы заставить их работать как лучшие друзья (статические файлы, auth, развертывание и т.д.).

Ответ 1

Есть способы задействовать ваши шаблоны на стороне клиента из шаблонов Django для интересных оптимизаций; однако, учитывая сходство между языками шаблонов Django и AngularJS, он почти никогда не стоит усилий здесь. Для большинства проектов такого типа я свяжу статическую службу AngularJS с Django REST Framework.

My urls.py порядок операций - это почти всегда URL-адреса Django REST Framework (как можно строче), за которым следует общий шаблон, который указывает все остальное на мой базовый шаблон приложения AngularJS в моем каталоге STATIC_ROOT для локального тестирование /dev:

if settings.DEBUG:
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(r'', 'serve', {
            'document_root': settings.STATIC_ROOT, 
            'path': '/base.html'}
        ),
    )

Указывая все непревзойденные запросы на одно и то же приложение/шаблон, вы можете начать использовать метод URL-адресов и маршрутизации с помощью истории, если хотите, чтобы хэш-теги. Если вы планируете придерживаться хэштегов, окончательный URL-адрес может быть более строгим (например, сопоставление / (URL root) с r'^$').

В процессе производства я использую HTTP-сервер обратного прокси или медленного клиента, такой как nginx, для обслуживания контента AngularJS (статического), проксирования запросов на службы REST в приложение Django WSGI.

Для связи с Django REST Framework я предпочитаю объекты класса JS, предназначенные для маршалирования данных, и из приложения AngularJS и Django REST Framework. Для этого я использую angular-django-rest-resource для создания классов, представляющих классы модели Django, которые я просматриваю в представлениях REST Framework.

Для максимальной гибкости в запросах angular -django-rest-resource может сделать для ресурсов, у меня будет установлен бэкэнд фильтра django для REST Framework, как описано здесь. Это позволяет ресурсам JS запрашивать объекты Django, ограниченные параметрами (например, /polls/?author=345&finished=1).

Если вы развертываете операции Django и REST в отдельном домене серверов, откуда подаётся основной шаблон AngularJS (например, если вы используете сторонний CDN в другом домене Интернета для HTML), то важно разрешить междоменные запросы этим ресурсам. Для этого я рекомендую django-cors-headers промежуточное программное обеспечение.

Надеюсь, это полезно. Это не лучшая практика, но она работала для меня.

Ответ 2

Чтобы предотвратить смешение Angularjs с Django, обратитесь: https://docs.angularjs.org/api/ng/provider/ $interpolateProvider

В основном, чтобы Django использовал переменные {{xyz}} и angular для совместного использования переменных {[{xyz}]}:

app.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('{[{');
    $interpolateProvider.endSymbol('}]}');
});