Seite 1 von 1

Anwendungsunterschiede: Bottle und Flask

Verfasst: Donnerstag 1. Juli 2010, 16:12
von orschiro
Hallo Leute,

mit Bottle und Flask etablieren sich zurzeit zwei recht ähnliche Microframeworks. Mich würde interessieren, wo ihr persönlich deutliche Unterschiede seht und in welcher Situation ihr welches von den beiden einsetzen würdet und warum ihr in der Situation gerade das eine gegenüber dem anderen präferieren würdet.

Ich persönlich habe mich mit beiden noch nicht intensiv genug beschäftigt, daher kann ich das nicht beurteilen, vielleicht hat der eine oder andere von euch aber schon beide in Benutzung gehabt und kann hier vielleicht markante Unterschiede herausarbeiten.

Es würde mich einfach interessieren. :)

Grüße

orschiro

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Donnerstag 1. Juli 2010, 18:35
von Defnull
Bottle unterstützt Python 3 und hat keinerlei Abhängigkeiten (single-file modul). Flask setzt auf Werkzeug und Jinja2 auf und kann daher nicht mit Python 3 verwendet werden. Das sind die essenziellen Unterschiede.

Wenn du Jinja2 als Template-Sprache kennst und magst, würde ich dabei bleiben und Flask nehmen. Ich persönlich finde sie etwas umständlich und habe auch lieber die Wahl (Bottle hat eine mächtige Template Engine eingebaut und unterstützt zusätzlich Jinja2, Mako und Cheetah). Ansonsten sind die Frameworks sehr ähnlich. Werkzeug und die in Bottle eingebauten Komponenten unterschieden sich nur unwesentlich. Die API der beiden Frameworks ist ebenfalls nahezu identisch (Flask ist nicht nur namentlich von Bottle inspiriert). Es ist also primär Geschmackssache.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Donnerstag 1. Juli 2010, 18:47
von nemomuk
wobei Flask einige nette Features besitzt wie z.B. before_request, after_request (weiß nicht ob das exakt so heißt)...

Das lässt sich zwar in Bottle auch schön über einen eigenen Dekorator lösen, fehlt mir aber imho noch. Es ist aber nicht verboten gute Ideen aus anderen Projekten zu übernehmen. ;)

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Donnerstag 1. Juli 2010, 19:05
von ms4py
Besonders an Flask gefällt mir die ausführliche und auch übergreifende Dokumentation (wie z.B. Forms und AJAX). Wobei sich viele der Themen natürlich auch auf bottle übertragen lassen. Auch gut sind die Snippets auf der Seite.

Im Vergleich finde ich, dass Flask schon einige mehr Features mitbringt, wie Sessions oder das Message Flashing. Auch ein Test-Konzept ist bei bottle gar nicht enthalten. Auch das Extension Interface ist ziemlich nice.

Mein Fazit: Für komplexere Projekte würde ich eher auf Flask setzen, bei relativ einfachen Applikationen fährt man mit bottle wegen den Abhängigkeiten eventuell besser.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Donnerstag 1. Juli 2010, 19:12
von noisefloor
Hallo,

Flask hat mit Werkzeug ein mächtiges Routing-Werkzeug - ob du das brauchst, musst du selber wissen.

Bottle ist sehr flexibel, was Template-Engine und Server angeht - ob du das brauchst, musst du selber wissen.

Grundsätzlich kann man wohl mit beiden Webanwendungen gleichermaßen umsetzen.

Ich selber nutze Bottle, weil ich a) den Single-File-keine-Abhängigkeiten-Gedanken mag und es b) Flask noch nicht gab, als ich eine Microframework braucht. ;-)

Gruß, noisefloor

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Freitag 2. Juli 2010, 13:13
von DasIch
Wächst dein Projekt und wird größer bist du mit Flask auf der besseren Seite und werkzeug bringt doch einiges mit was du bei bottle selbst machen musst. Außerdem kümmert sich flask um viele sicherheitsrelevante Dinge schon z.B. wirft flask.jsonify eine Exception wenn man eine Liste übergibt.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Freitag 2. Juli 2010, 16:15
von Defnull
DasIch hat geschrieben:Wächst dein Projekt und wird größer bist du mit Flask auf der besseren Seite und werkzeug bringt doch einiges mit was du bei bottle selbst machen musst. Außerdem kümmert sich flask um viele sicherheitsrelevante Dinge schon z.B. wirft flask.jsonify eine Exception wenn man eine Liste übergibt.
Ich arbeite übrigens an einem Adapter für die Request und Response Objekte von Werkzeug und WenOb, um sie auch in Bottle nutzen zu können. Dann hat man die Wahl, genau so wie es jetzt schon mit Template Engines und Servern.

Aber dein Argument mit der Sicherheit verstehe ich nicht ganz. Listen sind valide Ajax Antworten. 1) Warum sind sie bei flask nicht erlaubt und 2) wo ist da das Sicherheitsproblem?

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Freitag 2. Juli 2010, 22:17
von DasIch
Die Flask Dokumentation erklärt das JSON Problem ausführlich http://flask.pocoo.org/docs/security/#json-security. Dir Kurzfassung ist dass auf einer Phishing Seite mithilfe eines link-tags JSON ausgeführt werden kann, handelt es sich um ein Array welches zurückgegeben wird lassen sich die zurückgegebenen Daten durch überschreiben des Konstruktors erlangen.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Freitag 2. Juli 2010, 22:33
von Defnull
DasIch hat geschrieben:Die Flask Dokumentation erklärt das JSON Problem ausführlich http://flask.pocoo.org/docs/security/#json-security. Dir Kurzfassung ist dass auf einer Phishing Seite mithilfe eines link-tags JSON ausgeführt werden kann, handelt es sich um ein Array welches zurückgegeben wird lassen sich die zurückgegebenen Daten durch überschreiben des Konstruktors erlangen.
Wieder was dazu gelernt. Glücklicherweise erkennt Bottle ebenfalls nur Dicts als JSON-fähigen Datentyp und generiert kein JSON aus normalen listen.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Sonntag 4. Juli 2010, 23:20
von mitsuhiko
Defnull hat geschrieben:Bottle unterstützt Python 3 und hat keinerlei Abhängigkeiten (single-file modul). Flask setzt auf Werkzeug und Jinja2 auf und kann daher nicht mit Python 3 verwendet werden. Das sind die essenziellen Unterschiede.
Jinja2 laeuft auf Python 3. Bis WSGI nicht fuer Python 3 spezifiert ist hat das auch keinen Wert ein Framework dort am Laufen zu haben. Zudem fehlt es noch ueberall an Libraries weswegen ich selbst bei einem funktionierendem Framework ich fuer Webanwendungen von Python 3 abrate. Python 2 wird hier noch auf mindestens zwei Jahre das Mittel der Wahl bleiben. Und wenn die Zeit gekommen ist, wird auch Werkzeug (und damit Flask) auf Python 3 laufen.
Wenn du Jinja2 als Template-Sprache kennst und magst, würde ich dabei bleiben und Flask nehmen. Ich persönlich finde sie etwas umständlich und habe auch lieber die Wahl (Bottle hat eine mächtige Template Engine eingebaut und unterstützt zusätzlich Jinja2, Mako und Cheetah)
Es gibt bereits eine Flask Extension fuer Genshi. Wer was anders nutzen will ist herzlich dazu eingeladen eine eigene Flask Extension zu schreiben, ich helfe dabei gerne aus.

Aktuell existierende Flask extensions: http://flask.pocoo.org/extensions/

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Montag 5. Juli 2010, 08:05
von noisefloor
Hallo,

ab (oder bis) wann darf man sich eigentlich "Micro" nennen? ;-)

Weil: Flask ist ja schon eine Ecke umfangreicher als Bottle...

Oder wir führen noch den Begriff der Nano-Frameworks ein. :-)

Gruß, noisefloor

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Montag 5. Juli 2010, 08:32
von DasIch
Es ist nicht klar definiert aber wenn man schon auf existierende Frameworks schaut wird klar das Flask definitiv noch als Microframework gilt.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Montag 5. Juli 2010, 09:10
von mitsuhiko
noisefloor hat geschrieben:ab (oder bis) wann darf man sich eigentlich "Micro" nennen? ;-)
Fuer mich bezieht sich das nicht auf die LOC im Framework, sondern wie viel Boilerplate code notwendig ist um zu starten.
Weil: Flask ist ja schon eine Ecke umfangreicher als Bottle...
Sinatra ist eines *der* Microframeworks fuer Ruby und hat auch dependencies.

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Montag 5. Juli 2010, 09:42
von noisefloor
Hallo,

im Sinne von "wie schnell lässt sich eine einfach Applikation realisieren" tun sich Flask und Bottle sicherlich nichts. :-)

Dependencies sehe ich auch nicht als Kriterium... Bottle hat in dem Sinne ja auch welche, wenn man eine andere Template-Engine und einen leistungsfähigeren Server haben möchte.

Letztendlich ist es wahrscheinlich eine Meta-Diskussion, was "besser" ist... Richtiger wäre hier IMHO, was "für den eigenen Geschmack geeigneter ist".

Ich für meinen Teil halte es so, dass ich bei (augenscheinlich) gleichwertigen Sachen die Entscheidung auf der Doku (Verständlichkeit, Struktur etc.) basiere.

Gruß, noisefloor

Re: Anwendungsunterschiede: Bottle und Flask

Verfasst: Freitag 9. Juli 2010, 20:08
von Defnull
ahojnnes hat geschrieben:wobei Flask einige nette Features besitzt wie z.B. before_request, after_request (weiß nicht ob das exakt so heißt)...

Das lässt sich zwar in Bottle auch schön über einen eigenen Dekorator lösen, fehlt mir aber imho noch. Es ist aber nicht verboten gute Ideen aus anderen Projekten zu übernehmen. ;)
Dann hab ich eine gute Nachricht für dich :) http://github.com/defnull/bottle/commits/plugins (Noch nicht integriert, aber in Mache)