web-dev-qa-db-fra.com

Quelles sont les meilleures pratiques pour utiliser AngularJS avec Django

Je suis sur le point de démarrer un projet avec AngularJS pour le côté client et Django pour le côté serveur.

Quelles sont les meilleures pratiques pour les faire fonctionner comme les meilleurs amis (fichiers statiques, authentification, déploiement, etc.)

61
poiuytrez

Il existe des moyens d'alimenter vos modèles côté client à partir des modèles Django pour des optimisations intéressantes; cependant, étant donné les similitudes entre Django et les langages de modèles d'AngularJS, ce n'est presque jamais Je vais associer le service statique d'AngularJS avec le Django REST Framework pour la plupart des projets de ce type.

Ma urls.py l'ordre des opérations est presque toujours le Django REST URL du framework en premier (écrit aussi strictement que possible), suivi d'un modèle générique qui pointe tout le reste vers mon modèle d'application AngularJS de base dans mon STATIC_ROOT dir pour les scénarios de test/développement locaux:

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

En pointant toutes les demandes sans correspondance vers la même application/le même modèle, vous pouvez commencer à utiliser la méthode de piratage historique des URL et du routage si vous préférez cela aux hashtags. Si vous prévoyez de ne vous en tenir qu'aux hashtags, la correspondance finale de votre URL pourrait être plus stricte (par exemple, correspondant à / (Racine URL) avec r'^$').

En production, j'utiliserai un proxy inverse ou un serveur HTTP à clients lents comme nginx pour servir le contenu AngularJS (statique), en procurant les requêtes des services REST aux Django Application WSGI.

Pour communiquer avec le Django REST Framework, je préfère avoir des objets JS de classe pour rassembler les données vers et depuis l'application AngularJS et le Django REST. Pour cela, j'utilise angular-Django-rest-resource pour générer des classes qui représentent Django classes de modèles que j'expose dans les vues du framework REST.

Pour une flexibilité maximale dans les requêtes que angular-Django-rest-resource peut faire pour les ressources, je vais avoir le backend Django-filter installé pour le REST Framework as décrit ici . Ceci permet aux ressources JS de demander les objets Django contraints par des paramètres (par exemple /polls/?author=345&finished=1).

Si vous déployez les opérations Django et REST sur un domaine de serveurs distinct d'où le modèle principal AngularJS est servi (par exemple, si vous êtes en utilisant un CDN tiers sur un autre domaine Internet pour le HTML), il est alors important d'autoriser les requêtes inter-domaines vers ces ressources. Pour cela, je recommande le Django-cors-headers middleware.

J'espère que ceci est utile. Ce n'est pas le ensemble de meilleures pratiques, mais c'est celui qui a fonctionné pour moi.

56

Pour éviter la confusion d'Angularjs avec Django référez-vous: https://docs.angularjs.org/api/ng/provider/ $ interpolateProvider

Fondamentalement, pour activer Django pour utiliser les variables {{xyz}} et angular pour utiliser les variables {[{xyz}]} ensemble):

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