A while back, Jacob posted a list of Django projects he found outstanding. I’ve now had some time to work with several projects myself, and I’d like to take the opportunity to recommend a few of them.
It might not look like much from the “Coming soon…” note on the front page, but Coltrane is a nicely-done blog app, containing the most necessary features. It’s not a full-on WordPress, but it really doesn’t need to be, at least not for me. It does a great job of provided the essential functions, such as one-time markup conversion (with nice admin integration), categories and tags, the ability to post-date or hide entries, and link posting. There are a few more advanced features too, like cross-posting links to your del.icio.us account. This is a bit of a shameless plug, since I’m using it to put together my own blog.
I haven’t worked with it as extensively as I’d like yet, but Satchmo’s a nicely-featured webstore app with a very promising future. It’s got a great configuration system (based loosely on my own code), lots of pluggable features, and it can even be used with projects that use virtual money and products.
Perhaps the most important feature of Satchmo, however, is that it comes with a team of people committed to making it competitive with commercial offerings. It’s already a great app, but the team is looking to the future, planning how best to manage their development process in the long run. They’re looking to add a number of features that bigger offerings already have, as well as how to get ahead of the competition.
The mainstream retail world might not yet be ready for open source, I don’t know. But when they are, Satchmo will be there to make sure they’re blown away.
Schema evolution, or database migration, is basically the process of altering the structure of your database tables to accommodate new features. This process is often done manually, by writing SQL that is specific to the database server being used, as well as the project being modified. Since one of Django’s goals is to remove the need for hand-coding SQL, this became a bit of a sticking point. Several options have been proposed, but there are pros and cons to each.
I’m not pretending to say it’s “best”, but since this is my blog, I’m allowed to speak my own opinion, and Django Evolution seems to hit the sweet spot for me. I haven’t put it to its full usage yet, but I was pleased to see how easily it set itself up and made a record of my existing schema (just one
syncdb). I’ve looked over the documentation, and I like that it doesn’t try to assume everything is right before proceeding. It simply tells you what it thinks should be done, and you have to explicitly tell it to commit those things to the database.
If you disagree with its recommendations, you still don’t always have to fall back to raw SQL. It offers a relatively Pythonic API for specifying structural changes that will override the recommendation. If that’s still not enough, you can still fall back to raw SQL for those ultra-tricky changes that no system will be able to automate.
There are many more Django apps out there, many of which are no doubt wonderful and have bright futures. Unfortunately, I only have time today to write about a few of them. Maybe I’ll do another one of these sometime.