2013-08-09 2 views

ответ

56

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

Мой urls.py порядок операций почти всегда Django REST Framework URL-адреса первого (написано так строго, как это возможно), а затем общий шаблон, который указывает все остальное в шаблон приложения базы 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.

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

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

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

+1

Как вы управляли регистрацией и аутентификацией? – poiuytrez

+0

Я планирую использовать Django для части аутентификации. – poiuytrez

+3

Хороший вопрос. Я оставил его, потому что каждый случай отличается.«Лучшая практика», принятая сообществом, создает услугу «AngularJS», которая дает вам синглтон для запроса статуса пользователя. [Эта статья] (http://blog.brunoscopelliti.com/deal-with-users-authentication-in-angularjs-web-app) подробно описывает, как можно построить такую ​​услугу. В случае использования встроенного автозапуска Django я бы рекомендовал начать с включения [авторизации на основе сеанса Django REST Framework на основе сеанса] (http://django-rest-framework.org/api-guide/authentication.html#sessionauthentication) , –

6

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

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

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

Большое спасибо !!! У меня была проблема с использованием django + angular при использовании {{}}. Это сводило меня с ума!!! – Herman