Python und Webentwicklung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xm22
User
Beiträge: 10
Registriert: Donnerstag 1. Juli 2010, 13:53

Hallo erstmal,

zuerst was zu mir: Ich komme aus der PHP-Ecke und kann das auch ziemlich gut. Jetzt will ich aber doch mal über den Tellerrand schauen und mich mit Python - speziell im Bereich der Webentwicklung - auseinandersetzen. Ich bin da wahrscheinlich etwas naiv, aber ich komme einfach nicht dahinter. Vielleicht habe ich auch die ganze Zeit falsch gesucht.

Bei PHP ist es so, dass es zwar Frameworks gibt und die sich immer mehr durchsetzen, aber prinzipiell werden immer noch viele Dinge per Hand zusammen gebaut.

Ich habe mir vor einiger Zeit Python mal angeschaut, bin aber nicht weiter auf den Webbereich eingegangen, weil es mir im Gegensatz zu PHP eher nach einer universelleren Sprache vorkam. Jetzt will ich da allerdings tiefer einsteigen.

Bei Python lese ich im Bereich der Webentwicklung immer nur von Frameworks (Django und was es alles gibt). Jetzt stelle ich mir die Frage (Die mir hier hoffentlich beantwortet werden kann, ohne Flames auszulösen.), wie das bei Python aussieht. Webentwicklung ausschließlich per Framework? Oder auch ohne? Oder produktiv nur mit Framework möglich?Oder erst mal per Hand und dann auf Frameworks umsteigen? Oder wie?

Ich bedanke mich schon mal im Voraus. Falls dieses Thema so schon mal abgehandelt wurde, habe ich es leider nicht gefunden, würde mich aber über Links freuen.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

PHP funktioniert grundsätzlich wie CGI. Der Webserver ruft abhängig von der URL ein bestimmtes Script auf und übergibt die ganzen HTTP-Meta-Daten (Header, Cookies, ...) in Form von Umgebungsvariablen. Im Gegensatz zu anderen Sprachen versteckt PHP seine CGI-Herkunft allerdings unter einem Haufen mehr oder weniger sinnvollen Abstraktionen und Automatismen. Zum Beispiel hast du den Inhalt von HTTP-POST Anfragen fertig geparst in $_POST bereit liegen, ganz egal ob du sie brauchst oder nicht. Ob die ursprünglichen Daten nun application/x-www-form-urlencoded oder multipart/form-data waren, kann dir egal sein, da PHP das für dich erledigt. Die meisten PHP-Entwickler wissen nicht einmal, was der Unterschied ist.

Insofern kann man sagen, das PHP selbst ein Framework ist. Es tut Dinge, um dir die Web-Entwicklung leichter zu machen. PHP tut das, weil es für Web-Anwendungen geschaffen wurde. Im Gegenzug kann man PHP aber auch für nichts Anderes gebrauchen.

Python ist eine general-purpose Sprache. Man kann damit so gut wie alles machen, auch Web-Anwendungen schreiben. Damit das aber so reibungslos und einfach geht, wie bei PHP, braucht man ein Framework. Darum liest du bei Python so viel über Frameworks, obwohl sie bei PHP vergleichsweise selten sind.


Ein weiterer wichtiger Punkt beim Einstieg in Python/Web ist WSGI und das Anwendungs-Layout, das sich dadurch ergibt. Python-Web-Anwendungen sind normalerweise nicht in zig Dateien und Unterordnern aufgeteilt, die die URL-Struktur wieder geben, sondern eine einzige Anwendung, die selbst entscheidet, was sie mit der URL tun möchte. Der Webserver gibt also alle Anfragen an das selbe Skript weiter, anstatt abhängig von der URL verschiedene Skripte zu laden. Python Anwendungen sind daher meistens deutlich Objekt-orientierter und strukturierter, als die losen Skript-Sammlungen die bei PHP üblich sind.

Dieses "selbst entscheiden was man mit der URL tun möchte" ist der wichtige Punkt. Wenn es um dynamische Web-Anwendungen geht, haben URLs nichts, aber auch garnichts mit der Verzeichnis-Struktur auf dem Webserver zu tun. Viele PHP Frameworks und ModReqrite Tricks versuchen genau diese Unart von PHP zu umgehen, aber PHP ist in der Hinsicht eben noch sehr an seine CGI-Wurzeln gebunden.

Also:

1) Keine Angst vor Frameworks. Es gibt viele, such dir einfach eins aus, das deinen Anforderungen entspricht.
2) Verstehe WSGI. Es wird dir ständig über den weg laufen.
Bottle: Micro Web Framework + Development Blog
xm22
User
Beiträge: 10
Registriert: Donnerstag 1. Juli 2010, 13:53

Danke erst mal für die Ausführungen. Jetzt ist mir einiges klarer.

Ich muss allerdings eine Lanze für PHP brechen: Bootstraping setzt sich auch bei PHP immer mehr durch. Die Zeiten von einem Skript pro URL sind mehr oder weniger vorbei :) Ich selber kenne niemanden, der das nicht schon seit einigen Jahren aufgegeben hat.

Habe ich das richtig verstanden, dass Webentwicklung mit Python ohne Framework eher unüblich, um nicht zu sagen, übermäßig mühselig ist?
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

xm22 hat geschrieben:Habe ich das richtig verstanden, dass Webentwicklung mit Python ohne Framework eher unüblich, um nicht zu sagen, übermäßig mühselig ist?
Jain. Alles, was ein Framework tut, kannst du auch selbst tun. Für die komplizierten Dinge gibt es zahlreiche fertige Bibliotheken (webob, werkzeug). Für Lernzwecke ist es auch sinnvoll, so etwas mal selbst zusammen gebastelt zu haben. Ein Framework nimmt dir aber eine Menge Arbeit ab.

Das Wort Framework ist auch nicht ganz eindeutig. Bei Python gibt es 4 Wege, an seine Anwendung zu kommen:

1) Du machst alles (aber auch wirklich alles) selbst. (CGI)
2) Du nutzt existierende Bibliotheken für die komplizierten Teile, bastelst sie aber selbst zu einem eigenen Framework zusammen.
3) Du nutzt ein so genanntes micro-Framework (siehe Signatur). Das erledigt alles hässliche für dich, lässt dir aber sehr viele Freiheiten.
4) Du nutzt ein Full-Stack Framework (Django, TurboGears). Das erledigt wirklich alles für dich, dafür schreibt es dir aber auch vor, wie du die Anwendung strukturieren musst.

Rohes PHP ist irgendwo zwischen 2 und 3 angesiedelt. So etwas wie CakePHP gehört in die 4te Kategorie.
Bottle: Micro Web Framework + Development Blog
xm22
User
Beiträge: 10
Registriert: Donnerstag 1. Juli 2010, 13:53

Alles klar. Danke für die Hilfe :)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

defnull hat es ja schon grundlegend ganz nett erklärt. ;-)

Mit Python kannst du grundsätzlich mit Bordmitteln Webanwendungen schreiben, da alle Module in Standardpython drin sind. Das wäre dann CGI-basiert (was ein bisschen old-school ist... ;-) oder WSGI-basiert (der moderne & "empfohlene" Weg).

Nun ist es aber sehr mühselig, den kompletten WSGI-Formalismus selber zu schreiben - was nicht heißt, dass du das Prinzip von WSGI nicht verstanden haben solltest. Hilfreich sind hier die sog. Microframeworks wie Bottle oder Flask, welche dir den WSGI-Formalismus abnehmen, sonst aber alle Freiheiten lassen.

Freiheiten heißt, dass du ansonsten alles mit Python machen kannst, was du willst / Python kann. Du musst i.d.R. am Ende nur eine String ans Framework zurück geben, was dann deine Webseite darstellt bzw. vom Browser ausgegeben wird.

Gruß, noisefloor
xm22
User
Beiträge: 10
Registriert: Donnerstag 1. Juli 2010, 13:53

Vielen Dank.


Das ganze Thema scheint ziemlich zeivoll zu sein. Ich bin mal gespannt :)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Hätte hier noch was für dich, eine ausführliche Einführung in WSGI und Python-Web-Development:
http://docs.google.com/fileview?id=0Bxc ... MzAw&hl=en
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

http://wiki.python.de/Web-Frameworks
http://wiki.python.de/Python%20im%20Web

Bin immer wieder überrascht das niemand auf das Wiki verweist.
@Defnull: Deine Ausführen würden sich gut im Wiki machen!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Alls, was ich hier schreibe, steht unter einer MIT Lizenz ;)
Bottle: Micro Web Framework + Development Blog
xm22
User
Beiträge: 10
Registriert: Donnerstag 1. Juli 2010, 13:53

@jens: Auf den Seiten war ich schon, die sagten aber - zumindest für mich nicht erkenntlich - nichts zu meiner Frage aus. Sonst hätte ich hier nicht gefragt :)
Antworten