Wird man durch Django bevormundet?

Django, Flask, Bottle, WSGI, CGI…
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

Hallo,

meine Absicht ist es nicht eine Frage zu stellen, die bereits einige dutzend Male gestellt wurde. Auch habe ich mir Beiträge wie
http://www.python-forum.de/viewtopic.ph ... +framework
http://www.python-forum.de/viewtopic.ph ... +framework
bereits durchgelesen.

Es geht um folgendes:
Ich bin Python-Anfänger, habe die Basics aber schon gut drauf. Eines meiner Ziel ist es dynamische Webseiten erstellen zu können. Nun empfehlen hier die Erfahrenen von Euch mit Django anzufangen, da es besonders für Anfänger geeignet ist, weil einem die Arbeit mit dem ganzen "Hintergrundzeugs" abgenommen wird.
Für mich ist es aber enorm wichtig, zu erlernen, was sich so im Hintergrund abspielt - mind. genau so wichtig wie in der Lage zu sein dynamische Webseiten erstellen zu können.

Meine konkrete Frage:
Sind die Sachen, die Django einem abnimmt, weil man sich nicht darum kümmern muss wie z.B. bei Werkzeug (Flask) oder Bottle wichtige Netzwerk-Grundlagen? Wenn dem so ist, ist es nicht besser (wenn man die Zeit hat) sich von Django zu distanzieren und gleich mit Werkzeug/Bottle zu beginnen?
Es geht mir nicht um das ganze "Webdesigner/Frontend-Zeugs" - für mich ist Server/Netzwerkwissen viel wichtiger. Wenn Django also einem nur "Webdesigner/Frontend-Zeugs" abnimmt, dann werde ich Django nutzen, wenn durch das Nutzen von Django aber wichtiges Netzwerkwissen verloren geht, dann sollte man evtl. darauf verzichten, oder?

Viele Grüße,
Chevallier
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das Frontend nimmt dir kein Framework ab. Mit Netzwerkgrundlagen würde man sich beschäftigen müssen wenn man einen HTTP Server schreibt oder bestimmte Optimierungen vornimmt und bei letzterem spielt das Framework keine Rolle.

Du suchst Antworten auf Fragen die so nicht wirklich Sinn machen. Such dir einfach das Framework aus dass dir am meisten zusagt. Zumindest unter den von dir genannten kannst du keine schlechte Wahl treffen und die Konzepte lassen sich leicht übertragen so dass du später immernoch zu einem anderen Framework wechseln kannst.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Die undurchsichtigen Netzwerkgrundlagen nimmt Dir der TCP/IP-Stack Deines Betriebssystems ab, weil man sich damit nicht beschäftigen will. Die umständlichen HTTP-Protokoll-Grundlagen nehmen Dir das WSGI-Gateway, bzw. das jeweilige Framework ab, und zwar alle, weil man sich damit auch nicht beschäftigen will. Welche Grundlagen hältst Du also für wichtig? Hast Du Dir schon einmal die Django-Dokumentation angeschaut, die viele Grundlagen auch schön aufbereitet darstellt?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist die Frage wie viel Zeit man investieren möchte...
Die Grundlagen können nicht schaden...

Doch IMHO verdeckt Django sie nicht viel mehr als andere frameworks... Schließlich würde man bei 'micro' frameworks ebenfalls weitere Komponenten für mehr Abstraktion nutzten.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

chevallier hat geschrieben:Wenn Django also einem nur "Webdesigner/Frontend-Zeugs" abnimmt, dann werde ich Django nutzen, wenn durch das Nutzen von Django aber wichtiges Netzwerkwissen verloren geht, dann sollte man evtl. darauf verzichten, oder?
Wenn du fertig bist dir darüber Gedanken zu machen, dann landest du beim nächsten Punkt. Willst du wirklich einen objektrelationalen Datenbank-Mapper verwenden? Verlierst du dann nicht das Wissen, das man von SQL haben sollte? Und möchtest du überhaupt eine vorgefertigte Datenbank verwenden? Wäre es nicht besser die Datenfragmente selber mit eigenem Code zu verwalten?
sebsch
User
Beiträge: 1
Registriert: Donnerstag 28. Mai 2015, 06:26

Sind die Sachen, die Django einem abnimmt, weil man sich nicht darum kümmern muss wie z.B. bei Werkzeug (Flask) oder Bottle wichtige Netzwerk-Grundlagen? Wenn dem so ist, ist es nicht besser (wenn man die Zeit hat) sich von Django zu distanzieren und gleich mit Werkzeug/Bottle zu beginnen?
Die Frage ist eventuell nicht ganz geschickt gewählt..

Hättest Du gefragt, ob du durch die Wahl eines minimalistischen Webframework etwas lernen kannst, und ob ein (guter) Webentwickler wissen sollte, wie Server auf Socketebene funktionieren. Wäre die Antwort ein klares "JA"!
Dazu gibt es auch ein tolles Tutorial: http://ruslanspivak.com/lsbaws-part3/. Das sind wirklich die absoluten Basics der Server/Client - Programmierung.

Auch die Arbeit mit Microframeworks ermöglicht es viel zu lernen, ohne von der schieren Komplexität eines Frameworks wie Django erschlagen zu werden. Viele arbeiten auch genau deswegen lieber mit Microframeworks, da diese flexibler sind, und dadurch (weniger uniforme) Lösungsansätze klarer ausformuliert werden können. Insbesondere Flask und Werkzeug stechen da durch eine super Codequalität hervor.

Größere Frameworks bieten sich IMHO erst an, wenn man bereits ein tiefer gehendes Verständnis der Materie hat, denn Komplexität lässt sich am besten durchschauen wenn man das warum der Lösungsansätze kennt.
Deswegen wäre meine Empfehlung sich zuerstmal einen minimalistischen Ansatz zu wählen (auch die Basics sind bestimmt hilfreich), und sich dann später mit komplexeren Frameworks mit höherer Abstraktionsebene zuzuwenden, wenn man das dann möchte.
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

jens hat geschrieben:Doch IMHO verdeckt Django sie nicht viel mehr als andere frameworks... Schließlich würde man bei 'micro' frameworks ebenfalls weitere Komponenten für mehr Abstraktion nutzten.
Das habe ich mir gedacht, wollte aber nur noch mal sicher gehen. Und ja, meine Frage war nicht so ganz gut formuliert, sorry dafür.
Letztendlich muss man das Zeugs später doch noch importieren und mehr als das "import xy"-Kommando lernt man da auch nicht.

Python hat mir bis jetzt wirklich gut gefallen, aber wenn es ums Web-Development geht ist es echt zum Kotzen, da will man nur eine kleine Webseite mit einigen kleinen Funktionen aufsetzen und muss sich erst einmal vorher eine ganze Weile mit Django befassen - hab mir gestern ein kurzes Tutorial reingezogen, so ganz ohne ist das auch nicht. Und für jemanden, der vielleicht einmal im Jahr eine Webseite aufsetzt und das ganze bald wieder lernen muss, da sagt man sich: "Wozu der ganze Stress, machs doch einfach schnell mit PHP..."
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

chevallier hat geschrieben:Python hat mir bis jetzt wirklich gut gefallen, aber wenn es ums Web-Development geht ist es echt zum Kotzen, da will man nur eine kleine Webseite mit einigen kleinen Funktionen aufsetzen und muss sich erst einmal vorher eine ganze Weile mit Django befassen - hab mir gestern ein kurzes Tutorial reingezogen, so ganz ohne ist das auch nicht. Und für jemanden, der vielleicht einmal im Jahr eine Webseite aufsetzt und das ganze bald wieder lernen muss, da sagt man sich: "Wozu der ganze Stress, machs doch einfach schnell mit PHP..."
Und genau da kommen Microframeworks ins Spiel... ;)
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

snafu hat geschrieben:Und genau da kommen Microframeworks ins Spiel... ;)
:D Schiess mich tot!
Ich nehm jetzt einfach ein Microframework, die Frage ist nur welches :lol:
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

chevallier hat geschrieben:eine kleine Webseite mit einigen kleinen Funktionen aufsetzen
Was wäre das für eine "kleine Funktion"?!?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

jens hat geschrieben:Was wäre das für eine "kleine Funktion"?!?
Formulare, eine Datenbankanbindung (MySQL), ein CMS wäre optional.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@chevallier: das ist ja schon nichts kleines mehr, weder in Python noch PHP noch irgendeiner anderen Programmiersprache. Du brauchst ein Datenbankdesign und eine Anbindung, die Django schon mitbringt. Für Formulare machst Du entweder alles von Hand, oder Du nutzt einen Formulargenerator, den Django schon mitbringt. Ein CMS ist je nach Funktionsumfang groß bis riesig. Da nimmt man ein fertiges, und das ist schon in einer bestimmten Programmiersprache geschrieben, da entscheidet also der gewünschte Funktionsumfang, welches man nimmt und damit, auf welche Sprache man festgelegt ist. Da gibt es in Python eher weniger, in PHP schon mehr, in Ruby auch eine große Auswahl, in Java, wenn's auch was kosten darf, usw.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

und Formular-Daten validieren und Fehler dem User anzeigen... Was Django schon mitbringt :P

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@sebsch: Zu dem verlinkten Tutorial: Da sind mir zwei Sachen negativ aufgefallen. 1. Das in jedem Codeschnippsel ein einfaches ``recv(1024)`` benutzt wird und der Code dann davon ausgeht alle Daten empfangen zu haben. Und 2. der Satz „The simplest way to write a concurrent server in Unix is to use the fork() system call“, was vielleicht auf C zutrifft aber eher nicht auf Python und der Rest des Tutorial-Teils beschäftigt sich dann mit den ganzen Sachen die man beachten muss: duplizierte Dateien beim `fork()` die man schliessen muss, Zombie-Prozesse, asynchrones benachrichtigen wenn ein Kind fertig ist, das dadurch I/O-Operationen unterbrochen werden und damit der Rest des Codes umgehen können muss (betrifft dann auch direkt das naive ``recv(1024)``), und so weiter.

Mir ist das alles ein bisschen zu viel C 1:1 auf Python übertragen.
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

Sirius3 hat geschrieben:@chevallier: das ist ja schon nichts kleines mehr, weder in Python noch PHP noch irgendeiner anderen Programmiersprache. Du brauchst ein Datenbankdesign und eine Anbindung, die Django schon mitbringt. Für Formulare machst Du entweder alles von Hand, oder Du nutzt einen Formulargenerator, den Django schon mitbringt. Ein CMS ist je nach Funktionsumfang groß bis riesig. Da nimmt man ein fertiges, und das ist schon in einer bestimmten Programmiersprache geschrieben, da entscheidet also der gewünschte Funktionsumfang, welches man nimmt und damit, auf welche Sprache man festgelegt ist. Da gibt es in Python eher weniger, in PHP schon mehr, in Ruby auch eine große Auswahl, in Java, wenn's auch was kosten darf, usw.
Ne MySQL-Datenbank und die entsprechende Anbindung mit PHP: 30Min, nicht länger. Das Datenbankdesign: Wie ich schon sagte ein kleines Projekt, ohne große Anforderungen - wie lange kann da schon das Datenbankdesign dauern? Und die Anbindung, darauf braucht man erst gar nicht eingehen...

Jetzt habe ich ein weiteres Django-Tutorial durch, das Teil ist mir zu umfangreich, definitiv nichts für meine Bedürfnisse, ich bin kein Webdesigner/Entwickler, ich suche nur was für meine kleinen privaten Seiten.

Ich frag mal anders:
Für wirklich kleine private Projekte (nagelt mich jetzt bitte nicht zu), welches MicroFramework sollte ich da nehmen (passt jetzt nicht ganz hier ins Thema rein, ich weiss)? Ich will doch einfach nur eine kleine Webseite bauen und mit Python arbeiten, nicht jedes Mal ein Framework studieren wenn ich was kleines starten möchte und wenn ich was etwas größeres vorhabe flexibel sein, Herrgott, das kann doch nicht so verdammt aufwendig sein mit Python?
Aber vielleicht denke ich zu sehr daran wie es mit PHP ist: Code schreiben, Datei ins Verzeichnis verschieben und fertig (etwas übetrieben natürlich) - wenn's nur so mit Python wäre.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Aber du brauchst definitiv:
* Formular Generierung (gut, kann man auch per Hand machen, aber möchte man???)
* Formular Validierung (gut, kann man auch weglassen, aber möchte man?!?)
* ORM (gut, man kann auch pure SQL Statements im Programm haben, aber möchte man?!?)
* Session/Userdaten/Login (gut, könnte man per .htaccess machen, aber will man das?!?)

Wenn man will, kann man CGI/WSGI pur machen und kein Framework für irgendwas nehmen: Aber alles zu Fuss machen und somit doch ein eigenes, kleines Framework aufbauen?

Dann doch eins der micro Frameworks... Aber was deckt es ab und welche Lösungen für die über gebliebenen Probleme nehmen?!?

...oder doch in Django einarbeiten und man hat erstmal ausgesorgt...?

Klar, für Kleinigkeiten, erscheint es übertrieben. Aber für kleine Sachen Framework XY + Lib foo + Lib bar nehmen und bei großen Sachen, dann doch in Django einarbeiten und von "vorn" anfangen?!?

Jetzt denkst du nur an was kleines. Aber bleibt es dabei?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
chevallier
User
Beiträge: 22
Registriert: Sonntag 3. Mai 2015, 16:26

jens hat geschrieben:...oder doch in Django einarbeiten und man hat erstmal ausgesorgt...?
...
Jetzt denkst du nur an was kleines. Aber bleibt es dabei?
Die Logik verstehe ich ja: Django und gut ist. Es ist ja auch nicht so, dass ich faul bin. Und früher oder später wird's etwas größeres, das steht auch fest. Das Problem ist einfach nur, dass ich das viel zu selten tue - bis ich was größeres publiziere, kann schon mal ein halbes/dreiviertel Jahr vergehen und dann muss ich Django erneut lernen. Oder ich schreibe Karteikarten mit den ganzen Django-Zeugs und wiederhole sie jeden Tag bis es dann soweit ist...
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Microframeworks lassen sich ja auch mit Plugins erweitern. Für Flask gibt es z.B. ein SQLAlchemy-Plugin (Doku) und für Bottle existiert sicher etwas ähnliches. Zur Validierung von Formularen gibt es auch jeweils Plugins. Nur hat man sich dann im Endeffekt ein halbes Django zusammengebaut.

Das einzige, was ich bei Bottle und Flask einfacher zu erlernen finde, ist das Routing, weil man dafür Dekoratoren nutzen kann. Dies ist bei Django und einigen anderen größeren Frameworks nicht möglich. Aber ansonsten bietet Django einem kostenlos alles aus einem Guss an. Bei PHP bräuchte man mit Sicherheit auch einige Plugins. Außer man will die Dinge auf niedrigster Ebene lösen. Das kann man in Python ja genau so machen. Nur ist dies nicht der übliche Weg in der Praxis.

Ich unterstelle hier einfach mal bei deinem Python-PHP-Vergleich, dass du entweder die Fähigkeiten von PHPs Standardbibliothek höher einschätzt als sie sind, oder dass du tatsächlich lieber alles selber aufbaust. Nur ist letzteres wie gesagt alles andere als emfehlenswert.

Woran hapert es bei dir denn in Bezug auf die Django-Doku? Weißt du nicht so recht, wie du anfangen sollst? Erschließen sich dir bestimmte Vorgehensweisen noch nicht? Denn nichts für ungut, aber ein allgemeines Rumgejammer wird dich kaum weiter bringen, falls du Hilfe vom Forum erwartest. Du solltest hier schon konkreter werden.
BlackJack

@chevallier: Wenn Du an PHP magst das man einfach eine Datei schreibt wo Programm und HTML drin ist, dann lass die Finger von Python. So funktioniert das in Python nicht. In Python ist eine Trennung von Datenhaltung, Programmlogik, und Repräsentation üblich. Also bedeutet das in der Regel ein ORM und ein Template-System und das Routing des Rahmenwerks lernen zu müssen. Bei Django bekommt man ein Komplettpaket, bei Bottle und Flask muss/kann man sich die Sachen die über's Routing und ein paar andere Grundlagen hinaus gehen selber kümmern, sprich zusätzliche Bibliotheken einbinden.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

ich selber habe ja früher Bottle benutzt, später in Kombination mit SQLAlchemy und WTForms. Grund: ich dachte, Django wäre zu komplex.

Nur hatte ich mit Bottle+SQLAlchemy+WTForms auch nur die "Grundfunktionen" eines "großen" Webframeworks nachgebaut - Routing+ORM+Formulare.

Letztes Jahr habe ich dann auf Django gewechselt. Weil: durch alles unter einer Haube geht vieles einfacher und schneller.

Habe ich dadurch den Einsatz von Bottle+SQLAlchemy+WTForms jetzt "mehr" gelernt? Nicht wirklich. Das einzige ist vielleicht, dass - wie schon erwähnt - mit Bottle (Flask) für Newbies einfacher zu verstehen ist wie das mit WSGI und dem Routing funktioniert. Dafür reicht aber schon die Doku lesen und vielleicht selber mal ein Beispielprogramm schreiben - da muss man nicht direkt seine ganze Applikation auf Bottle setzen.

Gruß, noisefloor
Antworten