Я собираюсь запустить проект с AngularJS для клиентской стороны и Django для серверной части.
Каковы наилучшие методы, чтобы заставить их работать как лучшие друзья (статические файлы, auth, развертывание и т.д.).
Я собираюсь запустить проект с AngularJS для клиентской стороны и Django для серверной части.
Каковы наилучшие методы, чтобы заставить их работать как лучшие друзья (статические файлы, auth, развертывание и т.д.).
Есть способы задействовать ваши шаблоны на стороне клиента из шаблонов 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 промежуточное программное обеспечение.
Надеюсь, это полезно. Это не лучшая практика, но она работала для меня.
Чтобы предотвратить смешение Angularjs с Django, обратитесь: https://docs.angularjs.org/api/ng/provider/ $interpolateProvider
В основном, чтобы Django использовал переменные {{xyz}} и angular для совместного использования переменных {[{xyz}]}:
app.config(function($interpolateProvider) {
$interpolateProvider.startSymbol('{[{');
$interpolateProvider.endSymbol('}]}');
});