2013-08-09 18 views

risposta

56

ci sono modi di alimentare i modelli client-side da modelli Django per ottimizzazioni interessanti; tuttavia, date le somiglianze tra i linguaggi template di Django e AngularJS, non vale quasi mai la pena qui. Assocerò la porzione statica di AngularJS con lo Django REST Framework per la maggior parte dei progetti di questo tipo.

mio urls.py ordine delle operazioni è quasi sempre gli URL Django REST Framework prima (scritto come strettamente possibile), seguito da un modello generico che punta tutto il resto al mio modello di applicazione AngularJS di base nel mio STATIC_ROOT dir per i test locali/dev scenari:

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

puntando tutte le richieste senza eguali per la stessa app/modello, è possibile iniziare a utilizzare il metodo storico-hack di URL e di routing se si preferisce che a hashtags. Se si prevede di attenersi solo agli hashtag, la corrispondenza dell'URL finale potrebbe essere più rigorosa (ad esempio corrispondendo a / (URL root) con r'^$').

In produzione, utilizzerò un server proxy inverso o client HTTP lento come nginx per servire il contenuto (statico) di AngularJS, inoltrando le richieste di servizi REST all'app Django WSGI.

Per comunicare con il framework Django REST, preferisco disporre di oggetti JS di classe per il marshalling dei dati da e verso l'app AngularJS e il framework REST di Django. Per questo, utilizzo angular-django-rest-resource per generare classi che rappresentano le classi del modello Django che sto esponendo nelle viste REST Framework.

Per la massima flessibilità nelle query angolare-django-resto-risorsa può fare per le risorse, avrò il django-filtro installata per il quadro REST come descritto here backend. Ciò consente alle risorse JS di richiedere gli oggetti Django vincolati dai parametri (ad esempio /polls/?author=345&finished=1).

Se si stanno distribuendo le operazioni Django e REST su un dominio separato di server da cui viene fornito il modello principale di AngularJS (ad esempio, se si sta utilizzando un CDN di terze parti su un dominio Internet diverso per l'HTML), quindi è importante consentire le richieste tra domini a tali risorse. Per questo, raccomando il middleware django-cors-headers.

Spero che questo sia utile. Non è il il set di best practice, ma è quello che ha funzionato per me.

+1

Come hai gestito la registrazione e l'autenticazione? – poiuytrez

+0

Ho intenzione di utilizzare Django per la parte di autenticazione. – poiuytrez

+3

Buona domanda. L'ho lasciato fuori perché ogni caso è diverso.Una "Best Practice" adottata dalla comunità è la creazione di un servizio AngularJS, che fornisce a un singleton la richiesta dello stato di autenticazione dell'utente. [Questo articolo] (http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app) spiega in dettaglio come si possa costruire un tale servizio. Nel caso in cui usi l'auth incorporata di Django, ti consiglio di iniziare abilitando [auth basata su sessioni di Django REST Framework] (http://django-rest-framework.org/api-guide/authentication.html#sessionauthentication) . –

6

Per evitare confusione di Angularjs con Django riferimento: https://docs.angularjs.org/api/ng/provider/ $ interpolateProvider

Fondamentalmente per consentire Django per utilizzare {{xyz}} variabili e angolare di utilizzare {[{xyz}]} variabili insieme:

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

Grazie mille !!!, ho avuto un problema nell'utilizzo di django + angolare quando si utilizzava {{}}. Mi stava facendo impazzire!!! – Herman

Problemi correlati