Python Webprogrammierung Einbindung in HTML?

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.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Hallo,
ich habe nun einige Zeit lang im Internet versucht, mir diverse Webframeworks für Python anzuschauen. Schließlich bin ich (nach wie vor Anfänger) der Meinung, dass Python - wenn man ein Webprojekt realisieren will - um einiges komplizierter zu handhaben ist wie u.a. PHP. (Was nun auch überhaupt nicht stimmen muss!)

Andererseits verwendet Youtube / Google Python und das was "die" da produzieren ist ja nicht grade schlecht. ;)

Langer Rede kurzer Sinn: Bringt man ein Pythonscript auch ohne Webframework ins "Internet"?

Lässt sich ein:

Code: Alles auswählen

print "Hello World!"
in eine HTML-Datei (Quellcode) einbetten?

LG
Daniel
deets

Nein. PHP ist dafuer gemacht, so simpel wie moeglich Webseiten zu erstellen. Mit dem Nachteil, dass die damit erstellten Seiten (von Sprach-Aspekten mal ganz abgesehen) dann auch sehr schnell zu einem unuebersichlichen Klumpatsch werden. Dem beugen - auch in PHP - Frameworks vor.

Und was ist an sowas wie bottle kompliziert? Das sind 3 Zeilen Code, und man hat ein Hallo Welt....
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

mcdaniels hat geschrieben:Lässt sich ein:

Code: Alles auswählen

print "Hello World!"
in eine HTML-Datei (Quellcode) einbetten?
Nein. Und das ist auch gut so. Selbst in PHP macht das seit Jahren kein ernsthafter Entwickler mehr.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Servus deets!
Hallo /me!

Kompliziert ist vielleicht etwas überspitzt von mir formuliert! Vielleicht liegt es auch daran, dass man php einfach gewohnter ist, wenn es ums Web geht.

Leider ist das bei den Webhostern in Richtung Python überhaupt nicht so (meiner zb will absolut nix von Python wissen), was ich persönlich schade finde.


LG
Daniel
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

mcdaniels hat geschrieben:Kompliziert ist vielleicht etwas überspitzt von mir formuliert! Vielleicht liegt es auch daran, dass man php einfach gewohnter ist, wenn es ums Web geht.
Ich kann deine Gedankengänge sehr gut nachvollziehen. Als ich vor Jahren die dunkle Seite der Macht (PHP) verlassen habe fiel mir der Einstieg ins Webumfeld mit Python auch erst einmal schwer. PHP ist so simpel für den Einstieg, dass man fast zwangsweise alles andere als übermäßig kompliziert empfindet. Die Nachteile des PHP-Ansatzes werden einem erst dann wirklich klar, wenn man wirklich anders gearbeitet hat.

In Python könnte man als Entwickler von Webanwendungen direkt auf der CGI-Schnittstelle aufsetzen, aber das muss man sich wirklich nicht antun. Empfehlenswert ist meiner Meinung nach ein äußerst leichtgewichtiges Framework wie bottle, mit dem man einen guten Einstieg finden kann. Als großes Framework bevorzuge ich Django (das Feature-Monster).
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Ja genau in diese Richtung gehen meine Gedanken da. Vor allem wenn zb ich daran denke, wie simpel doch ein Apache mit php Support zu installieren ist, muss ich mir in dieser Hinsicht bei Python noch einiges an Infos anlesen...

Aber das ist wohl reine Bequemlichkeit :).
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

mcdaniels hat geschrieben:Vor allem wenn zb ich daran denke, wie simpel doch ein Apache mit php Support zu installieren ist, muss ich mir in dieser Hinsicht bei Python noch einiges an Infos anlesen...
Nimm auf jeden Fall nicht mod_python. Das ist nicht nur tot, das gammelt schon vor sich hin.

Ich bin auf meinen Servern auf Apache mit mod_wsgi immer sehr glücklich gewesen und eine WSGI-Schnittstelle bietet heute jedes ernstzunehmende Framework an. Die Konfiguration muss man sich aber tatsächlich einmal erarbeiten. Ab dann ist es Copy & Paste ... :D
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Danke für die Info!

Die Doku scheint ja auch ganz gut zu sein: http://docs.python.org/howto/webservers.html
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@deets und @/me: Es gab da ja mal Projekte namens Python Server Pages... :twisted:

@mcadniels: Hast Du Dir mal ein "Hello World" Beispiel bei Flask oder Bottle angeguckt? :K Das sieht doch wirklich nicht kompliziert aus!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

mcdaniels hat geschrieben:Leider ist das bei den Webhostern in Richtung Python überhaupt nicht so (meiner zb will absolut nix von Python wissen), was ich persönlich schade finde.
Huch, dann warum gibst du ihm Geld? Stimm doch mit den Füßen ab, gibt doch jetzt genug brauchbare Python-Webhoster.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
noisefloor
User
Beiträge: 3854
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Bringt man ein Pythonscript auch ohne Webframework ins "Internet"?
Gar nicht, weil zu kompliziert ;-) Liest die Mal die Doku und die Beispiele des wsgiref-Moduls aus der Standardbibliothek durch. Dann liest du nochmal die "Hallo Welt" Beispiele von Bottle oder Flask und du wirst sehen: Es ist alles ganz einfach, wenn man das richtige Framework nimmt :-)

Gruß, noisefloor
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

@hyperion:
Hast Du Dir mal ein "Hello World" Beispiel bei Flask oder Bottle angeguckt?
Klar! Das "kompliziert" war - wie oben erwähnt - eigentlich eher (mit mindestens einem Auge schielend auf PHP) gemeint. Jetzt muss man sich halt zusätzlich Gedanken drüber machen: "Wie setze ich den Apachen mit WSGI auf".

Ist sicher auch nicht schwierig, aber es erfordert Einarbeitungszeit. Ist man PHP eher gewohnt, neigt man dazu alles andre als komplizierter abzutun :).

@Leonidas
Huch, dann warum gibst du ihm Geld? Stimm doch mit den Füßen ab, gibt doch jetzt genug brauchbare Python-Webhoster.
Anforderungen ändern sich ;). Ich werd das Ganze mal offline mit nem Lamp oder Wamp testen. Eine sinnvolle Infoquelle hierzu dürfte ja: http://code.google.com/p/modwsgi/wiki/Q ... ationGuide sein.

LG
Daniel
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mcdaniels hat geschrieben: Jetzt muss man sich halt zusätzlich Gedanken drüber machen: "Wie setze ich den Apachen mit WSGI auf".
Hm... ich würde ja eher sagen, dass das *erste* Deployment ruhig "aufwendiger" sein darf, wenn man dafür ausreichend andere Pluspunkte einsammelt. Außerdem gibt es ja auch Webhoster mit WSGI-Support - da musst Du Dich ja quasi um nichts mehr kümmern - und wenn Du einen eigenen Server maintainst, dann solltest Du die Konfiguration eines Webservers ja nicht scheuen :-P

Zudem kann man mit dem Entwickeln ja "lange" vor einem Deployment-Test / Evaluation beginnen, weil man fürs Entwickeln idR. keinen externen Webserver benötigt. Sobald man dann in der Lage ist, die gemsate Infrastruktur und Toolchain diesbezüglich unter Python einzuschätzen, dann kann man sich immer noch um einen passenden Hoster kümmern.

Ganz ehrlich: Die Webapplikation an sich ist doch das wesentliche! Wenn die steht, dann findet sich mit jeder Technologie ein Weg, das ganze online zu bringen - alleine schon durch die damit verbundene intrinsische Motivation :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

wenn Du einen eigenen Server maintainst, dann solltest Du die Konfiguration eines Webservers ja nicht scheuen
Stimmt natürlich!

Meinen Xamp hab ich nun erfolgreich dazu bewegt, mod_wsgi für python 2.7.3 zu aktivieren (sehr einfache Sache).

Was ich allerdings nicht ganz verstehe ist "Mounting the CGI Applikation" -> http://code.google.com/p/modwsgi/wiki/Q ... ationGuide

Ich habe also das Modul für Python im Apachen aktiviert.
Nun muss man dem Apachen explizit mitteilen welche App ausgeführt werden soll:

Code: Alles auswählen

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.wsgi
D.h. es kann dann nur statisch ein Script (in dem Fall myapp.wsgi) gestartet werden und nicht generell "einfach" alles was zb im Ordner wsgi-scripts liegt?

LG
Daniel
deets

Du hast WSGI immer noch nicht verstanden. Oder bottle, flask & co. Dort gibt es keine Dateien ala PHP, welche den URL-Raum repraesentieren, und direkt aufgerufen werden.

Sondern *eine* Applikation, und einkommende Requests werden auf entsprechende Controller-Funktionen gemappt. Durch das @route in bottle zB.
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Du hast WSGI immer noch nicht verstanden.
Richtig! Ich brauche immer für alles ein wenig länger, bis es mir in die Birne geht :)

Es scheint ja jedenfalls ein komplett anderer Ansatz zu sein... wobei es mir hier an sich primär um die Aktivierung des mod_wsgi im Apachen geht.

Um nochmal auf die Webfunktionalität von Python (bottle) zu kommen:
Ich hab also eine App. Diese App ist der Einstiegspunkt für den Anwender. Über diese App steuere ich (wie du beschreibst) per @route (im Fall von bottle) was passiert wenn der User Url "so und so aufruft".

Deshalb also auch der statische Einstiegspunkt, weil alles dann von dort aus gesteuert wird.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mcdaniels hat geschrieben: Deshalb also auch der statische Einstiegspunkt, weil alles dann von dort aus gesteuert wird.
Bingo :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

Super!
Dann kann ich ja jetzt weiter mit der Einbindung vom mod_wsgi auf meinem Testapachen kämpfen :)

LG und Danke!

Daniel
mcdaniels
User
Beiträge: 168
Registriert: Mittwoch 18. August 2010, 19:53

So, läuft nun mal alles.

D.h. Ich hab den Apachen mit mod WSGI laufen (Python 2.7).

Folgendes Script gibt mir brav ein Hello world aus:

Code: Alles auswählen

def application(environ, start_response):
    status = '200 OK'
    output = '<p>Hello World!</p>'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]
Ganz verstanden habe ich nun die Herangehensweise zb mit bottle immer noch nicht...

Bottle = Framework
WSGI brauch ich, damit ich "Python" mit dem Webserver sprechen kann

Wie bring ich beide nun unter einen Hut? Sprich wie komme ich nun über Bottle in Verbindung mit WSGI dazu mein Hello World auszuspucken.

In Bottle wär das

Code: Alles auswählen

from bottle import route, run

@route('/hello')
def hello():
    return "Hello World!"
Mir fehlt irgendwie der Zusammenhang...

LG
Daniel
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten