2015-12-06 12 views
5

Um eine Web-Anwendung mit RESTful-Funktionen zu erstellen, habe ich unzählige Artikel und Videos gelesen und angeschaut und bekomme immer noch kein vollständiges Bild davon, wie es funktioniert. Und was ich wählen sollte. Jede andere Antwort ist die nicht hilfreich "es kommt darauf an". Ich habe es auf eine erste Wahl zwischen Django und Node heruntergekocht. Aber nirgendwo finde ich das ganze "Bild", wie die Stücke zusammen arbeiten und welche Module benötigt werden. Deshalb habe ich versucht, alles grob zu illustrieren. Beachten Sie, dass ich ein vollkommen neuer Anfänger bin.Django und Node - wie geht das?

Ich entwickle eine ERP-Anwendung mit Buchhaltungsmodulen. Grundsätzlich geht es neben CRUD auch um das Anzeigen von Diagrammen, Drucken und Speichern von Dokumenten. Also das ist das "es kommt darauf an"

Die einzige Sache, zu der ich Entscheidungen getroffen habe, ist, nginx, Postgresql und Debian 8 als tools/os zu benutzen. Dies sind die Fixsterne.

Meine Fragen sind nicht wirklich die gemeinsame Django vs Node.js und es ist nicht nur eine Meinung Ich möchte:

  1. Ist das Bild unten richtig? Irgendwelche Kommentare?
  2. Gibt es weitere Komponenten, die benötigt werden? Um loszulegen?

Node.js and Django structure

Antwort

16

Sie haben eine viel von Fragen - und auf Stackoverflow sollte es eine Frage sein, die ohne Erzeugung von viel Debatte oder haben Meinungen, anstatt Fakten beantwortet werden können.

Als solche denke ich, dass Ihre Frage als "zu breit" geschlossen werden könnte; Aber ich denke, es verdient eine Antwort.

Ich werde nicht sagen "es kommt darauf an", obwohl das wirklich alles ist, auf das es hinausläuft - aber hier ist mein Versuch, es zu erklären.

nodejs ist eine Laufzeitumgebung. Es ist eine Umgebung, die es Ihnen ermöglicht, Code auf dem Server mit Javascript zu entwickeln. Um etwas Nützliches mit Nodejs zu tun, jenseits von "Hallo Welt"; Sie müssen ein Framework verwenden, und es gibt Tonnen von denen herum und verschiedene Stapel wurden von der Community entwickelt, um alle Komponenten zusammen zu binden. Ein Beispiel für einen solchen Stack ist MEAN, der MongoDB für die Datenbank, Express für das Framework, Angular für die Unterstützung des Frontends und Node für die Ausführung.

Django ist ein Framework - es ist keine Laufzeitumgebung. Dies bedeutet, dass es einen Schritt von der Knotenwelt entfernt ist. Die Laufzeit für django ist Python. Django ist auch kein "Stack" wie MEAN, du kannst deinen eigenen Stack darauf aufbauen - aber da Django ein "batteries included" Framework ist, brauchst du nur eine Datenbank hinzuzufügen - es enthält alles was du sonst noch brauchst .

REST ist nur eine Möglichkeit, Web-Services zu entwickeln. Es ist keine Sprache oder eine Plattform oder eine Bibliothek. Es ist eine Reihe von Regeln, die eine Möglichkeit beschreiben, APIs so zu gestalten, dass sie die semantischen Verben von HTTP nutzen.

Sie können eine beliebige Bibliothek und Programmiersprache verwenden, um einen RESTful-Service zu entwickeln. Alles, was Sie wirklich brauchen, ist zwei Dinge: eine Bibliothek, um über HTTP zu kommunizieren, eine Möglichkeit, Daten zu serialisieren, vorzugsweise in JSON (aber selbst das ist keine Voraussetzung).

nginx ist nur ein sehr schneller Webserver und ein Reverse-Proxy. Der Grund, warum es oft erwähnt wird, ist, dass es für ein Framework sehr teuer ist, statische Medien zu bedienen.Alle Anfragen an ein Framework (entweder in der Welt von django oder in der Welt von nodejs) müssen eine große Kette von Komponenten durchlaufen, die dabei helfen, die HTTP-Anfrage zu entschlüsseln und eine Datenstruktur zu erstellen, die für Entwickler einfach zu verwenden ist. Diese Komponentenkette wird oft als Middleware bezeichnet. Da jede Anfrage durch diese Middleware gehen muss, ist es aus Performance-Gründen besser, dass Anfragen, die nicht die "Power" der Anwendung ausführen müssen (wie eine Anfrage für ein Bild, ein Stylesheet, eine Videodatei) sein müssen von etwas anderem behandelt. Dafür wird nginx verwendet, da es sich um einen sehr schnellen Webserver handelt.


Nun, da diese erklärt sind, müssen Sie sehen, welcher Stapel am besten für Ihre Anwendung funktioniert. Um dies zu tun, müssen Sie ein wenig über die Philosophie/Begründung oder das Problem wissen, das jeder Stack zu lösen versucht.

Für Django - das ist einfach. Django wurde von einem Team erstellt, das an mehreren Zeitungen arbeitet, um Inhalte zu verwalten, die auf verschiedenen Websites veröffentlicht wurden. Daher ist es so konzipiert, dass die Verwaltung von Inhalten von vorrangiger Bedeutung ist. Aus diesem Grund hat es eine sehr robuste Administrationskonsole als Standardkomponente; und ein eingebautes ziemlich robustes ORM und seine eigene Templating-Engine. Django überlässt es Ihnen, herauszufinden, wie Sie es am besten ausführen und bereitstellen. Sie bieten zwar viele Vorschläge und Beispiele - aber letztendlich entscheiden Sie selbst, welche Datenbank Sie verwenden, welchen Webserver Sie verwenden und wie Sie die Anwendung bereitstellen.

In der NodeJS Welt - der primäre Fokus ist nonblocking I/O und Reaktionsgeschwindigkeit. Nodejs zeichnet sich dadurch aus, dass es möglich ist, viele Anfragen gleichzeitig mit begrenzten Ressourcen zu bearbeiten. Daher bietet es Ihnen eine sehr leistungsfähige Grundlage, um Anwendungen zu entwickeln, die schnell auf Anfragen reagieren müssen ... und das war's. Wenn Sie in einem Knoten oder einer anderen spezialisierten untergeordneten Bibliothek programmieren, müssen Sie sicherstellen, dass Ihr Code die Bibliothek voll ausnutzt. Wenn Sie also mit dem Schreiben von Blockierungscode in Knoten beginnen, werden Sie feststellen, dass die erwartete Leistung nicht erreicht wurde.

nodejs ist es egal, was die Anwendung tatsächlich tut. Betrachten Sie es als ein sehr schnelles, sehr mächtiges Werkzeug. Sie können alles damit bauen, aber Sie müssen wissen, wozu das Tool am besten geeignet ist, um zu wissen, wann es verwendet werden soll.

Mit nodejs arbeiten Sie auf einer niedrigeren Ebene - deshalb gibt es viele Pakete, die Ihnen helfen, alle möglichen Dinge mit Knoten zu erledigen; und mehrere Möglichkeiten, wie Sie Komponenten übernehmen und Ihren eigenen Stack erstellen können - je nachdem, was Sie oben auf dem Knoten erstellen. Denken Sie daran wie Lego Bausteine.

nodejs und django schließen sich nicht gegenseitig aus. Sie können beide in Ihrer Anwendung nutzen und ihre Stärken ausnutzen und Nutzen daraus ziehen, was jeder am besten kann.


Soweit Ihre spezifischen Fragen:

Habe ich das Bild? Irgendwelche Kommentare?

Ich weiß es nicht. Hast du?

Gibt es weitere Komponenten, die benötigt werden? Um loszulegen?

Die Antwort darauf ist ja, weil Sie nicht alles von Grund auf neu erstellen möchten. Jeder Stapel hat seine eigenen Bibliothekskomponenten zum Entwickeln von Diensten. Für Django gibt es Django-Ruhe-Framework (DRF).

Welcher Rahmen ist am besten für CRUD? Welcher Rahmen ist am besten für RESTful? Irgendein anderes Modul benötigt? Beste Berichtgenerator zum Drucken? Beste Diagrammwerkzeuge?

Es gibt nichts, das für irgendetwas "das beste" ist. Diese Frage fragt nur nach Meinungen. Es ist wie fragen, was ist der beste Fruchtsaft?

Welche Rahmenbedingungen sind schnellsten und zuverlässigsten für CRUD mit Postgresql

Die Menschen haben viele robuste Anwendungen, die auf der postgresql entwickelt; Da Nodejs jedoch an Javascript gebunden ist, wird in diesem Bereich noch viel Arbeit geleistet.

Kann ich die Bibliothek (Geschäftsgeheimnisse) in beiden Umgebungen sperren?

Ja.

Gibt es bessere Tools zum Erstellen von ERP/Accounting?

ERP und Buchhaltung sind zwei sehr unterschiedliche Dinge. Es gibt Unmengen von Buchhaltungspaketen/Anwendungen, die in Python geschrieben sind. In Python gibt es sehr wenige ERP-Systeme.

Sie können die beiden nicht kombinieren und zusammenklumpen.

Welche Vorteile bietet Angular auf Node.js?

Der gleiche Vorteil der Verwendung von Angular oben auf _____ (fügen Sie Ihr Lieblings-Backend ein). Angular ist nur eine Frontend-Bibliothek.

Ein anekdotischer Vorteil ist, dass sowohl Angular als auch Node die gleiche Programmiersprache verwenden.

+0

Vielen Dank! Ich interpretiere das, dass mein eingebettetes Bild auf der richtigen Spur ist. Und Django ist einfacher zu programmieren. Und ich kann theoretisch alles in Angular bauen (Überspringen von Django und Node.js). Und dass die Verbindung von Node.js zu Postgresql besser hätte sein können. Und wie ich schon sagte, muss ich noch viel lernen. Ein bisschen klarer, aber immer noch verwirrt. – sibert