Anwendungsunterschiede: Bottle und Flask

Django, Flask, Bottle, WSGI, CGI…
Antworten
orschiro
User
Beiträge: 60
Registriert: Donnerstag 11. Dezember 2008, 16:10
Kontaktdaten:

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
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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.
Bottle: Micro Web Framework + Development Blog
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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. ;)
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

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.
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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?
Bottle: Micro Web Framework + Development Blog
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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.
Bottle: Micro Web Framework + Development Blog
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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/
TUFKAB – the user formerly known as blackbird
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Es ist nicht klar definiert aber wenn man schon auf existierende Frameworks schaut wird klar das Flask definitiv noch als Microframework gilt.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

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.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

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)
Bottle: Micro Web Framework + Development Blog
Antworten