2017-03-29 2 views
2

Ich habe ein Projekt, in dem ich Angular2 verwende, um eine Rest-API zu konsumieren, die ich mit Django-Rest-Framework erstellt habe. Momentan muss ich den django api mit dem django development server starten, zum Beispiel 'python manage.py runserver' und dann muss ich den angular 2 server entweder mit 'npm start' oder über den cli 'ng serve' starten. Gibt es eine Möglichkeit, mein django-Projekt für das angular2-Projekt einzurichten?Wie kann ich eine eckige App von djangos Entwicklungsserver bedienen?

+1

Ich habe es hier schon beantwortet: http://Stackoverflow.com/a/43135009/6555866 Funktioniert für mich. – giaco

Antwort

2

Ich gehe davon aus, dass Django-Rest-Framework eine Option für die Bereitstellung von statischen Assets hat, oder?

Wenn das stimmt, können Sie den angular cli so konfigurieren, dass seine Build-Ausgabe in einen Ordner exportiert wird, den Django bereitstellen kann. Die Ausgabe von ng build besteht aus einer Reihe von statischen Assets (js, css und index.html), die von jedem Webserver bedient werden können. Wenn Sie also die Option outDir in .angular-cli.json so ändern, dass sie in Ihrem Django-Setup auf Ihren statischen Asset-Ordner verweist, können Sie nur einen einzigen Ordner ausführen.

Es gibt zwei Hauptnachteile dieses Ansatzes. Die erste besteht darin, dass Sie sich nun aktiv daran erinnern müssen, jedes Mal, wenn Sie Ihr eckiges Projekt aktualisieren, ng build auszuführen und die neuen Änderungen sehen möchten - Sie verlieren die automatische Aktualisierung und das erneute Laden, wenn Sie ng serve verwenden. Der zweite Nachteil ist, dass die Entwicklung von ng merklich langsamer ist als die Aktualisierung von ng serves, nachdem Änderungen vorgenommen wurden (weil erstere in das Dateisystem schreiben muss, während letztere nur Dateien im Speicher hält).

Es gibt Möglichkeiten, um sich zu haben erinnere mich an die ng serve mit jedem Speichern einer Angular-Datei zu tun, aber das erfordert entweder den Einsatz von Zug oder Grunzen oder eine andere Aufgabe Läufer machen für Dateiänderungen zu überwachen und einen Befehl ausführen, oder die Nutzung von Welche Funktionalität auch immer Django für die automatische Dateiüberwachung und das Neuladen hat und wie man sich daran anpasst (ich bin nicht mit Django vertraut, aber Rails hatte die guard gem, um mit diesen Arten von Setups zu helfen).

Ich hoffe, dass hilft.

(Ehrlich gesagt, ich habe eine ähnliche Einrichtung mit Rails und endete damit entfernt und nur die beiden Server nebeneinander laufen - es war weniger Stress auf diese Weise).

+1

Hey Snorkpete danke für die Antwort. Kennen Sie sich überhaupt mit Multi-Tenant-Webanwendungen aus? Wenn Sie sind, würde ich gerne Ihr Gehirn irgendwann darüber entscheiden, wenn Sie dazu in der Lage sind. – FlashBanistan

+0

bedeutet jeder Benutzer/Konto bekommt ihre eigene Kopie der Datenbank? – snorkpete

+0

Ja, eine Art, bei der sich ein Kunde auf meiner Domain anmeldet und er eine Subdomain erhält, in der sich seine Benutzer anmelden können. Grundsätzlich eine gemeinsame Datenbank/separates Schema oder SaaS-Ansatz. – FlashBanistan

0
  1. Setzen Sie die Datei index.html in das Verzeichnis templates/<project-name>.

Verwendung dieser Funktion index.html dienen, die der Einstiegspunkt

def index(request): 
    return render(request, template_name='<project-name>/index.html') 
zu Winkel

ist
  1. Setzen Sie alle Ihre Winkel statische Dateien im STATICFILES_DIRS, so dass sie kann durch collectstatic Befehl gesammelt werden.

  2. Verwenden {{ STATIC_URL }} im Pfad der statischen Dateien in index.html sie

Jetzt zugreifen, wenn Sie die Indexfunktion Ihre Winkel App wird serviert bekommen zugreifen.

Verwandte Themen