Python zur Webentwicklung benutzen, wie geht das?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Es ist wohl so eine typische Frage, worauf meist eine Antwort mit lmgtfy.com kommt, aber ich wage es sie trotzdem zu stellen.
Ich verzweifle langsam aber sicher. Mit PHP kenne ich mich ein wenig aus, zumindest kenne ich das Prinzip. Auch Python meine ich, beherrsche ich inzwischen ganz gut, aber hier bin ich jetzt total ratlos oder steh auf dem Schlauch.

Hab mir vor ein paar Wochen ein wenig Webspace bei Raumopol.de gemietet, in der Hoffnung in nächster Zeit mich mit der Webentwicklung in Python zu beschäftigen (unter anderem), aber ich schaffe es einfach nicht, etwas anderes als ein einfaches "Hello world" aus dem Server herauszukitzeln. Ich habe die Möglichkeit ein vorgefertigtes Django template zu installieren, welches auch funktioniert. Die technische Grundlage ist also vorhanden und funktioniert. Aber wenn ich mit Bottle oder flup (also über fcgi) ein "Hello World" sehen möchte, sehe ich immer nur einen 500er Server-Fehler. Exceptions hab ich auch schon versucht abzufangen, klappt aber entweder nicht oder es gibt keine.

Naja, deshalb die Frage:
- Was gibt es für Tutorials, Beispiele oder wasweißich, bei denen man sagen kann, die "sollten" funktionieren? Ich hab bei Google einiges gefunden, aber keine Tutorials, mal abgesehen von denen der Frameworks (Bottle, Django), die allerdings nicht wirklich funktionierten. Auch im Wiki hier hab ich schon einiges gelesen.
- Ist hier jemand ebenfalls bei Raumopol und kann mir ein paar Tipps geben? (Hatte da mal nen Blogeintrag über Google gefunden, verfasst von einem gewissen "burli" :roll: )

Ganz allgemein, glaube ich, fehlen mir wohl schlicht die Grundlagen für Python und FastCGI, finde aber nichts womit ich mir die erarbeiten könnte. :oops:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Speziell bei einem 500er Fehler musst Du Dir mal das Log ansehen. Das ist oftmals ein Fehler, der das Programm abbrechen lässt. Allerdings bieten doch viele Frameworks auch einschaltbare Debug-Infos?!? Evtl. klappt das nicht bei Syntax-Fehlern. Letzteres kannst Du ja aber lokal leicht testen, wo Du eine Konsole hast.

Also: Erst einmal lokal entwickeln (Demos / Tests laufen lassen), danach deployen. Sollte also lokal alles laufen und auf dem Server dann nicht, wird es vermutlich an nicht verfügbaren Modulen oder falschen Versionen von Libs oder gar Python liegen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn was lokal läuft und aufm Server nicht kann das auch ganz triviale Gründe haben.

Mein Lieblingsfehler ist, dass ich beim Deployment von Bottle lokal -> Server + WSGI im Quelltext vergesse, ein `print` Statement zu Löschen (was z.B. noch vom Debuggen drin war). Dann wirft der Apache einen 500er, weil bei mod_wsgi i.d.R. eine Ausgabe auf stdout (was print ja meistens macht...) verboten ist. Nimmt man's raus, läuft alles.

Ansonsten halt immer die Doku für dein Webframework lesen, dort wir eigentlich immer erklärt, wie man sein Prog via FastCGI oder WSGI laufen lässt.

Gruß, noisefloor
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Bist du sicher, das flup auch installiert ist? Bottle kann von sich aus nur CGI und HTTP. Für Dinge wie fastcgi brauchst du die entsprechenden Abhängigkeiten (flup).
Bottle: Micro Web Framework + Development Blog
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

@Hyperion
Gut, werd ich mal wieder xampp rauskramen. Wollte damit zwar noch etwas warten, bis ich was größeres mache, aber in dem Fall ists wohl wirklich ne Erleichterung.
noisefloor hat geschrieben:Mein Lieblingsfehler ist, dass ich beim Deployment von Bottle lokal -> Server + WSGI im Quelltext vergesse, ein `print` Statement zu Löschen (was z.B. noch vom Debuggen drin war). Dann wirft der Apache einen 500er, weil bei mod_wsgi i.d.R. eine Ausgabe auf stdout (was print ja meistens macht...) verboten ist. Nimmt man's raus, läuft alles.
Ahja, das könnte eine Erklärung sein für so manche Seltsamkeiten :lol:

@Defnull
Naja, sicher bin ich mir nicht. Ich bilde mir allerdings ein irgendwo mal gelesen zu haben, dass Django flup benötigt um FastCGI zu beherrschen. Und Django tut ja wunderbar.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gremlin hat geschrieben:@Hyperion
Gut, werd ich mal wieder xampp rauskramen. Wollte damit zwar noch etwas warten, bis ich was größeres mache, aber in dem Fall ists wohl wirklich ne Erleichterung.
Äh... Du weißt schon, dass man WSGI-Apps mit dem eingebauten Webserver von Python testen kann? Ok, zumindest die Rahmenwerke, die ich bisher verwendet habe konnten das. Das ist ja grad das schöne; man muss eben nix deployen, sondern kann die App an sich erst einmal testen. Sollte die dann fehlerfrei laufen, kann man Programmierfehler schon ausschließen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Gremlin
User
Beiträge: 166
Registriert: Freitag 28. Mai 2010, 23:49

Jetzt wo du es erwähnst.. ja, habe ich irgendwo irgendwann mal gelesen :lol:
Gut, Gut, dann ists ja noch einfacher. :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gremlin hat geschrieben:Jetzt wo du es erwähnst.. ja, habe ich irgendwo irgendwann mal gelesen :lol:
Gut, Gut, dann ists ja noch einfacher. :D
Vielleicht solltest Du Dir das Tutorial zu bottle doch noch mal durcharbeiten? ;-)

Ansonsten hat flask da auch ein ausführliches Tutorial inkl. Tipps zum Debuggen via JavaScript Shell :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten