Django REST + Backbone / Ember / Angular Implementation Method

1

link

Alla luce di questo post, volevo fare domande su Django e in particolare sui metodi di implementazione per far funzionare una di queste tecnologie lato client con Django.

Attualmente, ho un backend che è l'installazione che usa Django Rest Framework per serializzare i dati. Il mio problema però, non sono sicuro di come ottenere il lato client per accedere al back-end.

Django è un framework MVC. Inizialmente pensavo di poter estrarre la vista e implementare solo il modello e il controller. Quindi, scriverei codice View completo separato per intenderci usando Backbone / Ember / Angularjs. Quindi il client accederà alle risorse REST. Come potrei combinare questi due dopo se volessi distribuire questo a Heroku? Heroku richiede solo un'intera applicazione Django. Come posso ottenere il codice client anche lì?

L'altra opzione, che ho visto prima, è NON togliere completamente la vista, ma usare i template Django WITH Backbone / Ember / Angularjs. Quindi, posso semplicemente mettere questi file js nella cartella "statica" per così dire. Ma poi sembra strano, perché poi avrei una vista sul lato server (correggimi se sbaglio), che acceda alle mie risorse REST. Ho provato questo, ma per qualche motivo anche se la mia pagina recupera i file javascript, non sembra funzionare come previsto.

    
posta jdang634 04.10.2013 - 01:41
fonte

2 risposte

2

Smetti di pensare in termini di MVC. Solo MVC descrive bene le interazioni se tutto accade sul lato server. Devi pensare a un livello più alto di astrazione. Ad esempio, Data Layer (ex database), livello API (ex lato server), Livello client (Webapp, app IOS, App Android).

Una SPA di base funziona sulla premessa che l'intero sito gira su un unico grande file HTML. I ricaricamenti non richiedono un round trip sul server perché in pratica stai mostrando / nascondendo diverse sezioni di codice.

In pratica non è necessariamente vero perché il framework (ex Angular) può estrarre template partial e dati dagli URL in background. Sembra che tu capisca molto ma non riesci a capire come dovrebbero essere separate le preoccupazioni tra server / client.

Per i template, fai lo stesso come faresti con Django. Tranne che, invece di caricare i file da una directory locale, devi recuperare i partial dal server.

Per generare viste che includono dati devi creare un controller in grado di recuperare i dati e utilizzarli nella vista parziale. Ci sono molti modi per farlo, ma il più comune è semplicemente creare un'API sul lato server che accetta richieste di dati e risponde con i risultati in JSON.

In termini MVC. Sia il server che il client utilizzeranno ancora modelli, viste e controller:

Sul server (ovvero l'API dei dati). I modelli sono le classi di accesso al database / archiviazione. Invece di generare codice HTML grezzo, le viste verranno utilizzate per formattare / serializzare i dati per il trasferimento. I controller elaborano i dettagli disordinati tra i modelli e le viste.

Sul client (cioè sul client WebApp). I modelli sono le funzioni che gestiscono il recupero e la deserializzazione delle richieste di dati. Le viste sono i partial parziali html che vengono analizzati in HTML statico. I controllori / le direttive gestiscono combinando i due.

Puoi ancora generare HTML sul lato server?   Ovviamente. Quanto lavoro decidi di fare nel client vs server dipende dai tuoi obiettivi.

Allora qual è il vantaggio dei framework lato client?   Se il tuo obiettivo è creare una SPA, i framework come Angular sono un'opzione molto più robusta rispetto alle alternative che consistono nel lanciare una serie di richieste AJAX, quindi collegarle al DOM usando qualcosa come jQuery.

Cosa c'è di così speciale nei framework lato client?   Nulla in realtà, spingono la responsabilità della generazione di HTML nel client. Invece di dividere i template HTML e la manipolazione dinamica tra client e server ora puoi fare entrambi nel client. Fornisce una separazione più chiara dei problemi e riduce il carico sul server.

Se hai bisogno di un livello dati che può essere accesso da più piattaforme (ex IOS, sito Web, Android), probabilmente hai già isolato le richieste di dati nella propria API. Se hai già fatto ciò, inserire il codice lato client sul client ha senso visto che lo stai già facendo per le altre piattaforme.

Semplificare il server a un livello dati semplifica la vita a chi sviluppa su più piattaforme. I framework lato client hanno reso più semplice il processo di recupero dei dati e generazione di HTML in modo dinamico sul client. Se il tuo obiettivo è costruire una SPA, l'utilizzo di un framework fornirà un buon scaffold su cui costruire.

Il principale svantaggio della generazione HTML lato client è che si basa su JavaScript e la maggior parte dei webcrawler dei motori di ricerca sono troppo stupidi per usare JavaScript. Ciò significa che se si dispone di un sito con contenuti pesanti, si avrà un brutto momento nel tentativo di far sì che i motori di ricerca indicizzino il contenuto. Esistono approcci ibridi per caricare in modo condizionale i contenuti generati dal server ai webcrawler, ma aggiungono un ulteriore livello di complessità in modo che i compromessi superino probabilmente i benefici.

    
risposta data 21.02.2014 - 09:30
fonte
1

Per far funzionare questo tipo di app, devi innanzitutto approfondire il funzionamento della configurazione dell'API. Le API sono diverse dalle normali app che puoi creare in framework come Django o Rails (anche se ci sono elementi di API in questi framework).

Per spiegare un po 'di più, puoi eseguire il tuo framework JS lato client ospitato su un host statico (qualcosa come: link )

Puoi quindi interagire con Heroku (il tuo back-end) tramite chiamate API (richieste 'GET', 'POST', 'UPDATE'). Questa interazione si verifica normalmente attraverso qualcosa come JSON (dove gli elementi sono "estratti" dall'API, il client "fa qualcosa" all'elemento e l'elemento aggiornato viene "spinto" indietro tramite l'API - rendendo l'aggiornamento del database).

Dai un'occhiata a questa domanda che ho chiesto tempo fa:

link

E dai anche un'occhiata ai tutorial di questo tipo riguardanti le API:

link

Ciò ti aiuterà un po 'a capire le API (questi tutorial sono particolarmente utili).

Se ricordo da quelle esercitazioni, puoi ospitare il tuo framework JS lato client statico insieme al tuo back-end nella stessa configurazione.

Chiedi ai ragazzi di Heroku di chiarire questo per te, poiché sono sicuro che sarà possibile ospitare anche JS / HTML / CSS statici nella stessa configurazione.

    
risposta data 22.11.2013 - 23:01
fonte

Leggi altre domande sui tag