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

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

was ohne Zweifel....

Read the Fabulous Manual heißt ;) THX!

...da gibts noch viel zu lernen und durch meine lange Leitung zu drücken... :) vor allem muss ich mich vom PHP Ansatz verabschieden, gar nicht so einfach...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mcdaniels hat geschrieben: vor allem muss ich mich vom PHP Ansatz verabschieden, gar nicht so einfach...
Wobei ich das immer noch nicht kapiere! Du hast Dich bis jetzt viel mit Deployment rumgeplagt - was, wie ich ja schon ausführte, imho zu Beginn eher demotivierend ist und auch nicht wirklich produktiv - aber augenscheinlich noch gar nicht mit dem "Erforschen" von Webprogrammierung mittels eines Frameworks. Speziell bei den "Mikro"-Webframeworks kommen dann ja noch andere hinzu, wie Form-Validation-Libs oder ORM.
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

Korrekt, es hat mich einfach interessiert, wie der Apache zu konfigurieren ist + wie das mit WSGI so läuft. Werde mich aber demnächst nur noch mit bottle beschäftigen. Ich befürchte, dass ich (leider) wieder viele Fragen haben werden.

Fürs "erforschen" reicht dann mal der Develwebserver. (für -vermutlich- sehr lange Zeit...)

Ich komme mir vor wie ein Esel vor dem neuen Scheunentor... ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich kenne jetzt Deine Anwendungsfälle nicht, aber evtl. solltest Du doch mal über Django nachdenken, speziell wenn Du von Rahmenwerken im Webbereich noch keine Erfahrung hast. Bei Django ist quasi alles, was man so braucht, bereits integriert (also ORM, Template Engine, Form Validation und last but not least eine automatisch generierte Admin-Oberfläche) und bestens aufeinander abgestimmt.

Nichts gegen Bottle (oder letztlich auch Flask), aber da muss man sich viele Komponenten dann noch zusätzlich selber zusammen suchen und einbauen. Dass ist dann für einen Anfänger sicherlich noch verwirrender - könnte ich mir zumindest vorstellen :-)
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

Ists also nicht so wie wenn man gleich mit ner IDE beginnt und so von den basics nicht mit bekommt? Anwendungsfälle... Formularauswertung, mysql Anbindung
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mcdaniels hat geschrieben:Ists also nicht so wie wenn man gleich mit ner IDE beginnt und so von den basics nicht mit bekommt?
Eine IDE nimmt einem doch keine Basics weg - sie vereinfacht das Leben. Das Problem bei einer IDE ist deren eigene Komplexität, die einem Anfänger zusätzlich zur eigentlichen Thematik (dem Erlernen einer Sprache) aufgebürdet wird. Bei vielen Sprachen kann man sich eine IDE zu Beginn daher sparen, und diese nach dem Grundverständnis für eine Sprache nutzen.

Bei Django verhält es sich mithin eher anders; gerade weil ein Anfänger oftmals weniger Plan von den besten Libs für eine Aufgabe hat, deren Zusammenspiel nicht unbedingt überschauen kann und dazu ggf. kein Spezialwissen bezüglich der Fallstricke im Webbereich aufweist, hilft es ihm da besonders, wenn er in ein "enges" Korsett gezwungen wird, welches ihm alles, perfekt aufeinander abgestimmt, bietet. Das fängt bei den Komponenten an, führt über die Doku bis hin zu Web-Communities.

Wenn Du Flask mit Mako, MongoDB und FungiForm wählst, dann ist es sicherlich schwierig bei einem Fehler jemanden zu finden, der das in dieser Kombi nachvollziehen kann ;-)
Anwendungsfälle... Formularauswertung, mysql Anbindung
Naja, das schreit ja nach einem Full-Stack-Webframework :-)
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

Na dann werd ich mir morgen mal Django ansehen :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also nicht falsch verstehen: Ich will weder Bottle noch Flask schlecht machen - beides sicher tolle Frameworks. Aber für viele Anwendungsfälle fehlt da eben zu viel und genau das macht es dann für den Anfänger komplizierter.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Hyperion: Ich denke, es ist soweit schon klar, dass man Mikroframeworks nur für "mikroframeworkartige" Aufgaben benutzen sollte oder eben, wenn man sich sozusagen seine eigene Toolchain für die Webentwicklung zusammenschnüren möchte (und vor allem auch weiß, was man tut). Einfach jedem Anfänger zu empfehlen, dass Bottle es schon richten wird, ist sowieso nicht gerade zielführend... ;)

Man kann höchstens sagen: "Ok, ich nehm jetzt z.B. Flask mit seinen Extensions und arbeite mich durch die einzelnen Dokus". Wäre dann halt nicht mehr alles aus einem Guß und man fragt sich am Ende wahrscheinlich, warum man nicht direkt Django benutzt hat. :lol:

Django bringt halt nur keinen praktischen `@route`-Dekorator mit, aber ich glaube, das würde man überleben...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

snafu hat geschrieben: Django bringt halt nur keinen praktischen `@route`-Dekorator mit, aber ich glaube, das würde man überleben...
Naja, ob man nun einen Dekorator "braucht" wage ich auch zu bezweifeln. Bevor Armin Flask aus der Taufe hob, habe ich auch schon mit Werkzeug kleinere Sachen gemacht; da hatte ich die Routen auch in einer einzigen Map an zentraler Stelle ;-) Aber was mir wirklich bei Werkzeug (und darauf aufbauenden Libs) gefällt, ist die Syntax für Routingdefinitionen! Mit RegExps in diesem Kontext mag ich mich nicht so anfreunden...
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

Hallo,
erster Eindruck von Django -> :shock: ... alles neu, alles anders... und mächtig! Gibts da u.a. eine Buchempfehlung oder sollte man sich da an die Webresourcen halten?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also ich würde versuchen, erst einmal das Tutorial durch zu *arbeiten*. Ich denke damit kommst Du schon recht weit :-)
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

Ich bin grade in der ... Orientierungsphase. Die kommt bei mir nach der "oh mein Gott ich bin erschlagen Phase" ;). Kommt Zeit kommt (dank Tutorial) hoffentlich auch Rat.

Django scheint ja wirklich einiges selbst in die Hand zu nehmen. (Man muss ja nich mal die SQL Kommandos selbst basteln 8) )
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

mcdaniels hat geschrieben: Django scheint ja wirklich einiges selbst in die Hand zu nehmen. (Man muss ja nich mal die SQL Kommandos selbst basteln 8) )
Das muss man bei Bottle oder Flask auch nicht; nur musst Du dafür dann das SQL-Framework "SQLALchemy" bemühen - Django bringt seinen eigenen "ORM" (= object relational mapper) inkl. SQL-Abstraktionsschicht mit.

Daran siehst Du vielleicht, womit ich bei einem meiner Postings hinaus wollte, als ich schrieb, dass man sich bei den Mikro-Frameworks um viele selber kümmern muss.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

snafu hat geschrieben:Man kann höchstens sagen: "Ok, ich nehm jetzt z.B. Flask mit seinen Extensions und arbeite mich durch die einzelnen Dokus". Wäre dann halt nicht mehr alles aus einem Guß und man fragt sich am Ende wahrscheinlich, warum man nicht direkt Django benutzt hat. :lol:
Wenn ich Flask hat mit Jinja2 imho eine bessere Template Engine als Django. SQLAlchemy ist imho besser als das ORM von Django und flatland ist imho ebenfalls besser als Form Library. Klar hab ich die Funktionalität prinzipiell mit Django schon aber sich für ein Microframework zu entscheiden nur weil es kleiner ist, ist genauso lächerlich wie zu sagen es wäre sinnvoll Frameworks zu haben die nur aus einer Datei bestehen.
Antworten