Hallo.
Ich möchte gerne in die Python-Webentwicklung einsteigen. Bloß wenn ich mir Frameworks wie Plone oder Django runterlade, verstehe ich zum größten Teil nur Bahnhof und komme mit den vielen Dateien/Code nicht richtig klar.
Wie fange ich dies bzgl am besten an?
Ich möchte z.B. ein kleine Online Gästebuch schreiben, wie soll ich da vorgehen. Ist anscheinend nicht so einfach wie PHP
Mfg
Webentwicklung - wie am besten anfangen
Es ist anders wie PHP.
Schau dir mal bottle oder Flask an.
bottle.paws.de
flask.pocoo.org
Da sollten einfache Beispiele drin sein und es gibt auch tutorials.
Schau dir mal bottle oder Flask an.
bottle.paws.de
flask.pocoo.org
Da sollten einfache Beispiele drin sein und es gibt auch tutorials.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,

Nimm' eins der beiden o.g. Frameworks, definieren zwei Routen (eine für die Eingabe, eine für die Anzeige), bau' zwei Templates (eins für die Eingabe, eins für die Anzeige) und fertig ist das ganze - zumindest in einer minimalistischen Variante.
Gruß, noisefloor
Klar ist das einfach.Ist anscheinend nicht so einfach wie PHP

Nimm' eins der beiden o.g. Frameworks, definieren zwei Routen (eine für die Eingabe, eine für die Anzeige), bau' zwei Templates (eins für die Eingabe, eins für die Anzeige) und fertig ist das ganze - zumindest in einer minimalistischen Variante.
Gruß, noisefloor
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Nun man kann es genauso "einfach" machen wie in PHP, indem man CGI benutzt und die Webseite eben per `print` ausgibt.Sync32 hat geschrieben:Ist anscheinend nicht so einfach wie PHP
Aber das will man eigtl nicht machen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 21
- Registriert: Dienstag 31. März 2009, 14:05
- Wohnort: Bielefeld
Ich hätte dazu auch eine Frage: gibt es eigentlich auch unter Python etwas zu QuickForm und PHP vergleichbares, mit dem man die Formularverarbeitung vereinfachen kann und das sich mit einem der hier genannten Microframeworks verbinden lässt?
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Flask und Bottle 0.8 können mir Bordmitteln doch die Inhalt von Forms aus der Post-Data rausholen...
Gruß, noisefloor
Flask und Bottle 0.8 können mir Bordmitteln doch die Inhalt von Forms aus der Post-Data rausholen...
Gruß, noisefloor
-
- User
- Beiträge: 21
- Registriert: Dienstag 31. März 2009, 14:05
- Wohnort: Bielefeld
Es geht mir ja nicht darum, die Inhalte der Felder aus dem Formular herauszuholen - dass das geht, davon bin ich ausgegangen und dafür bräuchte man auch in PHP kein extra Paket.
QuickForm zeichnet sich in erster Linie dadurch aus, dass zum Beispiel Pflichtfelder als solche gekennzeichnet werden können und man sich nicht darum kümmern muss, dass entsprechende Fehlermeldungen ausgegeben werden, wenn diese leer bleiben. Das Formular wird erneut angezeigt und alle Felder, die bereits ausgefüllt wurden, werden automatisch mit den bereits getätigten Eingaben befüllt und die Felder mit fehlenden Angaben optisch hervorgehoben. Auch die Verarbeitung von Optionslisten, Radiobuttons usw. ist enorm vereinfacht.
QuickForm zeichnet sich in erster Linie dadurch aus, dass zum Beispiel Pflichtfelder als solche gekennzeichnet werden können und man sich nicht darum kümmern muss, dass entsprechende Fehlermeldungen ausgegeben werden, wenn diese leer bleiben. Das Formular wird erneut angezeigt und alle Felder, die bereits ausgefüllt wurden, werden automatisch mit den bereits getätigten Eingaben befüllt und die Felder mit fehlenden Angaben optisch hervorgehoben. Auch die Verarbeitung von Optionslisten, Radiobuttons usw. ist enorm vereinfacht.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ich fange auch gerade an. Webprogrammierung in Python ist nicht schwerer als mit PHP, es ist nur anders. Einzige Schwierigkeit ist, einen Hoster zu finden. Aber auch da gibt es hier einige Tipps.
Die genannten Frameworks sind schon ganz gut. Ich werde Flask verwenden. Das macht einen runden Eindruck und ist immer noch überschaubar. Django ist halt 3 Nummern größer. Flask schafft den Spagat zwischen minimalistisch schlank und komfortabel
wtforms ist in Flask auch schon integriert. http://flask.pocoo.org/docs/patterns/wtforms/
Die Dokumentation ist zwar in Englisch, aber verständlich geschrieben und umfangreich. Die Entwickler von Bottle und Flask geistern hier im Forum umher, man kann also immer fragen.
Die genannten Frameworks sind schon ganz gut. Ich werde Flask verwenden. Das macht einen runden Eindruck und ist immer noch überschaubar. Django ist halt 3 Nummern größer. Flask schafft den Spagat zwischen minimalistisch schlank und komfortabel
wtforms ist in Flask auch schon integriert. http://flask.pocoo.org/docs/patterns/wtforms/
Die Dokumentation ist zwar in Englisch, aber verständlich geschrieben und umfangreich. Die Entwickler von Bottle und Flask geistern hier im Forum umher, man kann also immer fragen.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
So ich habe mich nun für Bottle entschieden. Gefällt mir gut.
Ich wollte gerade fragen, wie ich das mit den Formularauswertungen mache aber in dieser Sekunde fällt es mir glaube ich ein:
Ich mach mir ne Route "/auswerten".
DAnn binde ich ganz normal mein html-Formular ins Template ein und verlinke die Ausführung (action="...") einfach zur Route
Bloß wie wertet man das in Python aus?
Bei PHP gibts dafür nen [GET]_
Edit:
Ah hab gerade das Tutorial (http://bottle.paws.de/page/tutorial) entdeckt. Werde es mal durcharbeiten.
Ich wollte gerade fragen, wie ich das mit den Formularauswertungen mache aber in dieser Sekunde fällt es mir glaube ich ein:
Ich mach mir ne Route "/auswerten".
DAnn binde ich ganz normal mein html-Formular ins Template ein und verlinke die Ausführung (action="...") einfach zur Route
Bloß wie wertet man das in Python aus?
Bei PHP gibts dafür nen [GET]_
Edit:
Ah hab gerade das Tutorial (http://bottle.paws.de/page/tutorial) entdeckt. Werde es mal durcharbeiten.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Im Tutorial wirst Du im Abschnitt 'Using GET and POST Values' fündig werden.Sync32 hat geschrieben: Bloß wie wertet man das in Python aus?
Bei PHP gibts dafür nen [GET]_
wtforms wurde Dir ja schon empfohlen; damit kannst Du eben die Validierung ziemlich automatisieren und ggf. hübsche Fehlermeldungen rendern lassen. Ich weiß allerdings nicht, inwiefern die Kopplung zwischen wtforms und bottle reibunsglos klappt. Aber vermutlich wird das bottle-request Objekt da stimmig sein.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
entweder Framework (s.o.) oder von Hand. Wenn du nur wenig Felder hast ist es Ermessenessache, ob du sowas wie wtforms brauchst oder nicht.
An den Inhalt der Felder kommst du ja mit
bzw. über
dran.
Die Validierung sollte dann auch kein Problem mehr sein.
Gruß, noisefloor
Kommt drauf an.Sync32 hat geschrieben: Bloß wie wertet man das in Python aus?

An den Inhalt der Felder kommst du ja mit
Code: Alles auswählen
bottle.request.GET.get('name_des_feldes') #für GET-Methode
bottle.request.POST.get('name_des_feldes') # für POST Methode
Code: Alles auswählen
bottle.request.forms.get('names_des_feldes') # ab Bottle 0.8.x
Die Validierung sollte dann auch kein Problem mehr sein.
Gruß, noisefloor
Ja nun sehe ich es auch. Ist ja alles sehr schön auf der Bottleseite dokumentiert.
Hätte ich ja auch vorher drauf kommen können, dass ich da fündig werde.
*sorry*
Trotzdem danke für eure Hilfe.
Nochmal ne generelle Bottle Frage:
Wie funktioniert @route eigentlich hinter den Kulissen?
Nach dem URL Aufruf wird kontrolliert , ob sich diese URL irgendwo als @route im Pythoncode befindet:
Wenn nicht -> #404
Wenn ja -> Den Code darunter ausführen oder woher weiß er das, was er ausführen soll? Also er nimmt immer den Code, der sich unter @route('/lalala') befindet?
Hätte ich ja auch vorher drauf kommen können, dass ich da fündig werde.

Trotzdem danke für eure Hilfe.
Nochmal ne generelle Bottle Frage:
Wie funktioniert @route eigentlich hinter den Kulissen?
Nach dem URL Aufruf wird kontrolliert , ob sich diese URL irgendwo als @route im Pythoncode befindet:
Wenn nicht -> #404
Wenn ja -> Den Code darunter ausführen oder woher weiß er das, was er ausführen soll? Also er nimmt immer den Code, der sich unter @route('/lalala') befindet?
@Sync32: `route()` ist eine Dekoratorfunktion, die wird ausgeführt nachdem die ``def``-Anweisung ausgeführt wurde, die damit "dekoriert" wird. Ich nehme mal stark an, dass die Route und die dekorierte Funktion irgendwo in einem globalen Dictionary hinterlegt werden. Aber das kannst Du Dir doch auch im Quelltext anschauen wie `route()` implementiert ist.
Edit: Mal ganz primitiv die Idee:
Edit: Mal ganz primitiv die Idee:
Code: Alles auswählen
ROUTES = dict()
def route(path):
def decorator(func):
ROUTES[path] = func
return func
return decorator
@route('/add')
def add(a, b):
return a + b
@route('/sub')
def sub(a, b):
return a - b
def main():
for route in ['/add', '/sub', '/gibtsnicht']:
print ROUTES.get(route, lambda *args: '404')(5, 10)
if __name__ == '__main__':
main()
Sync32: Für Sessions gibt's mindestens eine WSGI-Middleware. Gleich der erste Eintrag in der Bottle-FAQ: http://bottle.paws.de/page/faq
- noisefloor
- User
- Beiträge: 4149
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Also man nutzt Sessions aber überlicherweise schreibt man sowas nicht selbst sondern nutzt ne Authentifizierungs-Middleware.Sync32 hat geschrieben:Aber wie werden unter Python Loginsysteme geschrieben?
Gibts da wie bei PHP Sessiona oder so?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wobei wir das Thema neulich erst hatten und etwas wirklich tolles niemand präsentieren konnte. Evtl. kannst Du uns da etwas empfehlen? In flask ist das ganze ja bereits enthalten, weswegen ich in Zukunft wohl eher darauf aufbauen würde, als auf bottle.Leonidas hat geschrieben:Also man nutzt Sessions aber überlicherweise schreibt man sowas nicht selbst sondern nutzt ne Authentifizierungs-Middleware.Sync32 hat geschrieben:Aber wie werden unter Python Loginsysteme geschrieben?
Gibts da wie bei PHP Sessiona oder so?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Wenn ich mir die Definition von "Sessions" [1] bei Flask so anschaue, hat Bottle das auch. Es heißt nur anders (Secure Cookies) und funktioniert wie stink normale Cookies, nur das man nen Python Objekt statt eines Strings übergibt [2] und der Client die Daten nicht ändern kann. Nen wrapper dafür, der das wie "Sessions" aussehen lässt, wäre schnell geschrieben. Ich finde diese Art nur zu beschränkt (Cookies dürfen nicht beliebig groß werden) um das wirklich "Session" zu nennen. In jedem anderen Framework versteht man unter Sessions eher etwas anderes: Serverseitig gelagerte Daten, die eben NICHT bei jedem Request mit übertragen werden müssen und NICHT vom Client einsehbar sind.Hyperion hat geschrieben:Wobei wir das Thema neulich erst hatten und etwas wirklich tolles niemand präsentieren konnte. Evtl. kannst Du uns da etwas empfehlen? In flask ist das ganze ja bereits enthalten, weswegen ich in Zukunft wohl eher darauf aufbauen würde, als auf bottle.
[1] http://flask.pocoo.org/docs/quickstart/#sessions
[2] http://bottle.paws.de/docs/dev/api.html ... set_cookie
Bottle: Micro Web Framework + Development Blog