15 ms·
Flask 0.7 Released (Python Web Framework)
- mattdeboard 15y agoI really enjoy Flask's simplicity (relative to Django) and light-weightness. It was the first web framework I used, actually. Armin Ronacher & team make quality products.
- retube 15y agoI've been looking at light-weight scripting-language frameworks, any experience with Catalyst? I'm a fan of Perl.
- mattdeboard 15y agoNo, sorry.
- sigzero 15y agoCatalyst is not light weight. You would need to look at Dancer or Mojolicious for Perl equivalents.
- draegtun 15y agoCatalyst is a full blown MVC web framework. For light-weight (micro) web frameworks in Perl have a look at: * Dancer (http://perldancer.org/ http://perldancer.org/) * Mojolicious::Lite (http://mojolicio.us/ http://mojolicio.us/) * Squatting (http://p3rl.org/Squatting http://p3rl.org/Squatting) * Web::Simple (http://p3rl.org/Web::Simple http://p3rl.org/Web::Simple)
- retube 15y agoGreat, thanks for the suggestions
- draegtun 15y agoThats OK. PS. Here is a presentation doing a loose comparison between Dancer & Flask called "Dancer for Python programmers" (http://www.slideshare.net/xSawyer/perl-dancer-for-python-programmers http://www.slideshare.net/xSawyer/perl-dancer-for-python-pro...)
- giu 15y agoI actually started diving into Python a few months ago, and after a day or two into it I had already ported a feed aggregator from PHP to Python thanks to Flask: https://github.com/giu/hsr-twitterverse https://github.com/giu/hsr-twitterverse. I've also written a simple paste site using Flask without any headaches. Its simplicity is just amazing, and it's really fun to work with.
- cageface 15y agoThe debugger is badass. I built a few simple sites with Flask year and it was the thing I wished most I could have in Rails.
- draegtun 15y agoFor Perl developers - The debugger has been ported to PSGI/Plack - http://blog.plackperl.org/2011/05/miyagawaplack-middleware-interactivedebugger-github.html http://blog.plackperl.org/2011/05/miyagawaplack-middleware-i...
- maaku 15y agoCan't help you with Rails, but in case you or anyone else didn't know the Django-Extensions app adds the Flask (Werkzeug) debugger to Django projects with the run_plus command.
- hiddenbayes 15y agoRelease Announcement: http://flask.pocoo.org/mailinglist/archive/2011/6/28/ann-flask-0-7-released/ http://flask.pocoo.org/mailinglist/archive/2011/6/28/ann-fla...
- louis14 15y agoHow does Flask compare to Bottle (http://bottlepy.org/docs/dev/index.html http://bottlepy.org/docs/dev/index.html)? Any advantages/disadvantages?
- DasIch 15y agoFlask has more features, more and better documentation, a bigger community and ecosystem as well as more developers behind it. Furthermore Bottle does magic that is frowned upon by some people.
- jsherer 15y ago"does magic that is frowned upon by some people." Can you elaborate?
- the_mitsuhiko 15y agoI would describe it more carefully. Bottle's advantage that it's self contained and in a single file, however bottle's design also hides away the application object from you which makes it quite hard to have more than one of them. It is possible with the stacked object thing and I think they changed it even to make it possible to do what Flask did, but when Flask started at least there was a design difference there. By now I really would like to see them merge, but Bottle wants to stick to the design idea of just having one file which Flask will never be able to do because of the dependencies.
- louis14 15y agoAny reasons why they should merge if they are so different?
- alvivar 15y agoMerge is an excellent idea when two projects, frameworks, etc have the same goals (Not necessarily the same features). For example The Pylons Project taking BFG as is base and making Pyramid, with all the experience from Pylons community and BFG. This will make changes on both sides of the community but brings a new Framework with the possibility of improvement. I guess the idea is take the best from both frameworks y make a new one, better, with a big community, and a lot of knowledge from the previous experiences.
- atroche 15y agoOf particular interest are the generic or 'pluggable' class-based views. They work in a very similar manner to the ones that came with Django 1.3. http://flask.pocoo.org/docs/views/ http://flask.pocoo.org/docs/views/ It's good timing; I was just getting to the stage in my app where I was noticing the need for some view refactoring.
- ch0wn 15y agoSame for me. Class-based views were basically the only thing I missed from django for my particular app.
- deleted 15y ago[deleted]
- fakeempire 15y agohttp://flask.pocoo.org/docs/foreword/#the-status-of-python-3 http://flask.pocoo.org/docs/foreword/#the-status-of-python-3
- mattdeboard 15y agoThis should not be downvoted and in fact probably needs to be a top-level comment to counter the kind of misinformation the grandparent of this post is basing his complaint on.
- bmelton 15y agoI think if you looked you'd see that they have indeed looked into Python 3 support and have found it technically inviable without breaking a number of things. Python 3 was backwards incompatible to 2.6/2.7, and there are very large code-bases comprising things like Django that can't just be carted over part and parcel. As somebody who's spent time building enterprise-class Django applications for a very slow-moving set of customers (e.g., the Federal government) I'm glad they're not pushing forward faster than the rest of the world.
- sigzero 15y agoThey are not ignoring P3. They are laying plans to move to it. Patience is a virtue. I am learning Python 3 and would love to be using Flask and even Django. It will happen. There was a 5 year plan for P3 adoption and we are only half way there.
- minikomi 15y agoI'm always impressed by Flask - especially its documentation. In fact, this seems like a good occasion to have a poke around and build something with it. On a slightly related note - although jinja2 is already quite compact, I'm a fan of haml and I'm always surprised by the lack of support for it in Python. Is there something I'm missing? Uncanny valley for Pythonistas?
- LeafStorm 15y agoThere was a Haml-like language called GHRML a while back, but it seems to have disappeared. There is something like it called SHPAML: http://shpaml.webfactional.com/ http://shpaml.webfactional.com/ Though I think Ruby has better markup libraries in general. For example, they have Nokogiri, which is an absolute joy to use for XML parsing. And implementations of Markdown and Textile with actual parsers, whereas Python Markdown and Python Textile are straight regex-using ports of the Perl/PHP versions. It's kinda sad really.
- piranha 15y agopython-markdown is in no way port of perl version. It's complete parser which can be extended and so on. But python-markdown2 is port of perl version, based on regexps instead of being real parser.
- adw 15y agoXML parsing: lxml (lxml.html is particularly wonderful). Markdown/Textile; in the Python world people mostly use Restructured Text, not least because of its privileged position in docstrings.
- pssdbt 15y agoCheck out Pantyshot/Upskirt for Markdown, it's worked out pretty well for me.
- kbd 15y agoTo learn Ruby I decided to redo my website in it, and I felt the complete opposite. I was surprised there's nothing comparable in the Ruby world to Jinja2 or Mako. Nothing supports blocks/macros or template inheritance, so I wrote my own small template engine in Ruby that does.
- e1ven 15y agoRight now, I'm writing most of my projects in Tornado.. Not because I need the async, but because I wanted a simple web.py like format that was under active development. Can someone help me understand where Flask fits into things? It would essentially be a replacement for Tornado? What's the advantage of this over Tornado? Ease of use? I can understand the simplicity argument; I chose to avoid Django because it was too heavy, so I'd love to hear more about how Flask compares.
- jokull 15y agoTornado is batteries included. Flask uses Werkzeug and Jinja2 and encourages packaging extensions for localization, form processing, ORM's etc.. Flask, Werkzeug and Jinja2 are all Pocoo projects that have a good community around them and excellent documentation. Technically I would not like to argue the superiority of either, although Flask seems to fit my tastes much better. Flask's use and deployment of "magic" is pretty spot on. For example by making the request object omnipresent (that is flask.request is always bound and has the right context). That way it is not passed around the MVC stack but just imported and introspected when needed. Flask is probably the "healthiest" project I've encountered.
- jimmybot 15y agoWhy would it be good to avoid passing around the request object?
- espeed 15y agoArmin explains the request object here (http://flask.pocoo.org/docs/reqcontext/ http://flask.pocoo.org/docs/reqcontext/) and here (http://flask.pocoo.org/docs/quickstart/#id4 http://flask.pocoo.org/docs/quickstart/#id4), and the concept of "context locals" in detail here (http://werkzeug.pocoo.org/docs/local/ http://werkzeug.pocoo.org/docs/local/).
- stevelosh 15y agoCan someone help me understand where Flask fits into things? It would essentially be a replacement for Tornado? What's the advantage of this over Tornado? Ease of use? Pretty much yes to all of this. I can understand the simplicity argument; I chose to avoid Django because it was too heavy, so I'd love to hear more about how Flask compares. Flask "feels" more like CherryPy than Django to me, but yes, it's more lightweight than Django and more modular (doesn't define an ORM, etc). The thing that keeps me from using Flask for any serious work is Django's admin interface. That thing saves me ridiculous amounts of time.
- viandante 15y agoI take the occasion to ask here if someone could point or write some documentation on unittest in Flask. I am trying to get that right using mongodb...
- johnpaulett 15y agohttp://flask.pocoo.org/docs/testing/ http://flask.pocoo.org/docs/testing/ For testing a MongoDB database, I wrote a simple unittest.TestCase subclass that in the setUp and tearDown, creates and then deletes a test database.
- viandante 15y agoCould you put an example on pastebin or somewhere? I would really appreciate this.
- johnpaulett 15y agoAlong the lines of http://flask.pocoo.org/docs/patterns/mongokit/ http://flask.pocoo.org/docs/patterns/mongokit/, I have a MONGODB_DATABASE setting, which is set to my normal database name. Then access the database via the connections' dictionary syntax, instead of attribute syntax (I have a helper method to make this prettier): connection[app.config['MONGODB_DATABASE']].mycollection.find_one() The unittest code just modifies the setting: import unittest def setUp(self): myapp.app.config['MONGODB_DATABASE'] = 'test' self.app = myapp.app.test_client() def tearDown(self): # can clean up here, e.g. connection.test.drop_collection('mycollection')
- viandante 15y agoThanks a lot man. This was really useful, I am on my first steps with unittest.
- old-gregg 15y agoFlask is awesome and can be easily supercharged by pairing it with Paste Deploy: http://pythonpaste.org/deploy http://pythonpaste.org/deploy This way you get Flask simplicity and elegance, but also you get Rails-like separation of configuration test/development/production environments. Another misconception people seem to have is that Flask means Jinja2. Fortunately that's not the case, swapping Jinja with Mako is also extremely easy. Finally, Flask can run on top of any WSGI server, not just a built-in one: at http://mailgun.net http://mailgun.net we have Flask services running on Tornado and on Paster servers - the thing is rock solid.
- sandGorgon 15y agoI notice that several projects (including Flask) do not build in support for DB schema management- e.g. migrations. For those of you who are writing apps in Flask, how do you guys manage changes in DB schema ?
- lightcatcher 15y agoFlask doesn't have any sort of database interaction built in. You do it all with the more general Python tools. SQLAlchemy is a common ORM for Flask, probably because of the Flask-SQLAlchemy extension. I've never done any migrations with Flask, but I would think http://code.google.com/p/sqlalchemy-migrate/ http://code.google.com/p/sqlalchemy-migrate/ could do it.
- espeed 15y agoFlask has become my framework of choice because it's incredibly well designed, the code is clean, and also because it's decoupled from an ORM. Rails and Django emerged at a time when RDBMS ruled, and they were both built around an ORM. Now you have more database options that have less of an impedance mismatch, but because Rails and Django are so ORM-centric, forgoing the RDBMS in favor of another option means you now have a framework mismatch. Graphs are a much more elegant way of storing relational data. With graph databases you don't have to mess with tables or joins -- everything is explicitly joined. For most Web development projects, I have shifted from a relational database to a graph database as the primary datastore, and use Redis, Memcached, and MongoDB for specialized purposes when called for. Neo4j Community Edition (http://neo4j.org/ http://neo4j.org/) is open source and now free, and pairing it with the TinkerPop stack (http://www.tinkerpop.com/ http://www.tinkerpop.com/) is ideal. With Neo4j you can now store 32 billion nodes (http://blog.neo4j.org/2011/03/neo4j-13-abisko-lampa-m04-size-really.html http://blog.neo4j.org/2011/03/neo4j-13-abisko-lampa-m04-size...) with 2 million traversals per second (http://www.infoq.com/news/2010/02/neo4j-10 http://www.infoq.com/news/2010/02/neo4j-10), and you can use Gremlin with it (the graph traversal language), which let's you calculate PageRank in 2 lines -- to see what you can do with Gremlin, check out this 10 min screencast (http://www.youtube.com/watch?v=5wpTtEBK4-E http://www.youtube.com/watch?v=5wpTtEBK4-E). For tabular data, relational databases rock. But the relational model doesn't align well with object-orientated programming so you have an ORM layer that adds complexity to your code. And with relational databases, the complexity of your schema grows with the complexity of the data. The graph-database model simplifies much of this and makes working with the modern-day social graph so much cleaner. Graphs allow you to do powerful things like find inferences inside the data in ways that would be hard to do with relational databases. There is an open-source Python persistence framework in the works called Bulbs that connects to Neo4j through the Rexster REST server, and there are binary bindings in the works as well. There is also a Python open-source Web development framework for graph databases called Bulbflow that is built on Bulbs and Flask, which will provide stuff like authentication and authorization, in a graph-DB way. Both frameworks should be released in the next few weeks.
- loevborg 15y agoI've used it for small side-projects and liked it. What I would like to know is how to do logging, both day-to-day ("user Joe created") and for debugging (like JSON dumps of objects). It should work both with the built-in server and with gunicorn, for deployment. I looked but wasn't able to find a solution that worked. The documentation mentioned logging facilities, but I found no working examples.
- dumbphone 15y agoFlask seems nice and simple until you need to access a database such as MySQL. With SQLAlchemy it seems like there's a lot more code needed just to perform simple CRUD operations, whereas Django's ORM is really simple. Is there a better alternative to SQLAlchemy? Is it possible to use Django's ORM in Flask?
- dumbphone 15y agoGonna answer this one myself: Seems http://www.sqlobject.org/ http://www.sqlobject.org/ might be a good alternative.