Ask HN: What Python web programming frameworks and tools are you using?
I'm interested in hearing from the community about what tools you are using for building web applications in Python.
This was last asked about half a year ago (http://news.ycombinator.com/item?id=1357925) and 2 years before that (http://news.ycombinator.com/item?id=153487), but things are changing fast, especially with the recent popularity of NoSQL, so I think it's worth bringing up again.
So, what tools, databases, web servers and frameworks are you using for your latest Python web application projects? Or, if you've abandoned Python, what language have you moved to, and why?
45 comments
[ 5.2 ms ] story [ 84.2 ms ] thread- Google App Engine
- http://www.tipfy.org (GAE specific framework)
http://www.franciscosouza.net/2010/08/flying-with-flask-in-g...
- Vim
- django-extensions
- fabric
- Flask
- a lot more JavaScript than before
Web Stuff: jQuery, less.js
Database: PostgreSQL
Tools: Emacs
Werkzeug
Jinja2
PostgreSQL
Redis
fabric
celery
vim
git
Disclaimer: We're about to launch Djangy.com, so my opinion is obviously biased.
Other than that I'd like if you could also give a sense of expenses that I might run into if I deploy my app on djangy. The details in terms of pricing are lacking there.
Just some feedback. I know it's in private beta. All the best.
Would you mind emailing me at dave@djangy.com? I'd like to ask you some details about which app was yours, and what exactly your experience was. We're about to roll out a TON of new changes within the next few days, and we'll be inviting quite a few more users into the beta program. I want to make sure we're covering all the bases and keeping users happy.
Thanks :-)
But you can use whatever you want.
Tools: * Virtualenv * Fabric
Best combination. Zope, Django, Web2py, web.py are just not that flexible & reliable for advanced web applications (IMHO).
I'm quite satisfied with Python. I can't see any reason to move to another language for general web development, but while Python is quite current and modern, it isn't esoteric, geeky or on the cutting edge. So, I'm dabbling with Clojure and Scala, specifically Scalatra and Compojure.
query = myModel.all().filter("property_1 =", value)
query = query.filter("property_2 =", value)
Here's a gotcha... be sure to have a space between "property_1" and "=", "property_1=" won't work (but it won't raise an error either).
Be aware that the Datastore has very limited support for querying in general, and you will certainly not have anywhere near the kind of power you are used to when composing queries in .Net with something like LINQ.
GAE is a good start if you want to learn Python, but it is a terrible platform for web development. You will find yourself stymied and frustrated by its inflexibility, the need to give up your normalized data model from Day 1, lack of referential integrity, and the awful performance compared to a real SQL database.
Oh, and the constant outages, the scheduled maintenance that borks the whole system for a week, the backup tool that takes 4 hours to run and then crashes trying to restore the backups... I have a long list :)
This is something to consider at the get go, you'd be surprised how quickly performance degrades (ie a hundred or more items, not thousands)
Django templates look a lot like HTML, but with special Django stuff in them. You can get the general idea from this page: http://docs.djangoproject.com/en/dev/ref/templates/builtins/
And yes, you write in JS pretty much the same stuff that you'd always write in JS.
Idle and Visual Studio for editing
I'm using web.py, testing with nose, doing database work with sqlalchemy to a postgres back-end. Looking at Paste and wondering if I should be using that as well, but currently a simple apache2 mod_wsgi container is doing ok.
I deploy to Debian stable but develop on Ubuntu Lucid, which means that in order to keep myself sane I've built Python 2.6 and virtualenv packages for debian, and install all the packages I need with pip. I'm still getting my head around this, because I've not used these tools at all before.
Deployment is done by pushing to a remote git master branch, where the remote live branch is what's checked out and running.
Styling is all blueprint.css, and I'm contemplating whether to use my usual Compass workflow or not. So far it's not been needed, but I haven't pushed things very far yet.
I'm not in the sort of space where NoSQL would be an advantage, so I can't comment on it.
I'll probably try Flask for my next project.
database: Postgresql
server: UWSGI + Cherokee
Flask is a very nice framework, and the documentation is awesome. I've tried a lot of Python frameworks out before deciding on Flask. It's a paralyzing decision - there is just so much out there. The process of choosing a web framework is filled with information overload - from reading about the framework, dabbling with the code, and finally learning the actual framework. For the reason, I recommend going with a microframework. You learn what you need as you go. So this lead me to Flask.
Two things set Flask apart (for me) - the documentation and the extensions. Just check out the site http://flask.pocoo.org for more information. You also want to be assured that development on the framework is not just going to be dropped some day. It really feels like this framework is going places. (My initial inclination was toward CherryPy, but the documentation is bad. After all these years.)
My dev work is mostly done on Windows, and for an IDE I've taken to using JetBrain's PyCharm. (I'm primarily a .NET developer, and I find it more convenient to use Windows to avoid context switching. The fact that I deal with the massive and all-encompassing .NET is also a major reason I went with a Python microframework). On Linux, I can get by with Emacs.
Using Ubuntu in production environment.