Best & Most Useful Django Apps You Should Know About
Reusable apps are one of the many feautures that makes Django awesome.
I'll write here some of the best and most used pluggable applications for the Django framework that (for now) aren't part of the contrib packages
I've read loads of Django books, but no one really cover most of the best ready-to-use applications out there, some are mentioned, but hardly explained in details..
I'll provide you with a list of the most common ones, with a brief description, and links for downloads, resources and documentation (if any).
South - Database Migrations
One of the things that really disappoint the new-comer Django developers is database migrations. Most of the book tells you that there's no database migration, well, they're wrong.
Here is where South comes into play.
South has a few key features:
Automatic migration creation: South can see what's changed in your models.py file and Automatically write migrations that match your changes.
Database independence: As far as possible, South is completely database-agnostic, supporting five different database backends.
App-savvy: South knows and works with the concept of Django apps, allowing you to use migrations for some of your apps and leave the rest to carry on using syncdb.
VCS-proof: South will notice if someone else commits migrations to the same app as you and they conflict.
Django-Debug-Toolbar - Debugging
A must-have debugging tool, Django-debug-toolbar display, directly in a collapsable panel on your web pages, various debug informations about the current request/response, and it's easy to set it up
In details it provide the following informations:
Django version
Request timer
A list of settings in settings.py
Common HTTP headers
GET/POST/cookie/session variable display
Templates and context used, and their template paths
SQL queries including time to execute and links to EXPLAIN each query
List of signals, their args and receivers
Django-Registration - User Registration
On a website, user registration is a common feature, writing the code for it over and over can become tedious, in Django you can use an existing application Django-registration, that do just what you need, it provides a registration form, an e-mail verification, a panel for the account management, a common pattern you should know well..
It's also easy customizable, so, most of the time it's all you will need for user registration
Django-Profiles - User Profiles
An application useful if you need to have custom user profiles in your project. You'll just need to create the profiles that suits your need, and Django-profiles provides you with a user profile zone, highly customizable.
Most all the time you'll end up using this with django-registration, and yes, you can easily get them to work together ;)
Haystack - Search
Do you need a search engine on your site and you don't know where to start to get things done (and done well)? You only need one thing (or better said, one app): Haystack.
It has a familiar API that allows you to plug in different search backends (such as Solr, Whoosh, Xapian, etc.) without having to modify your code! You can enable a full-text-search for your site in almost NO-TIME.
It has awesome features also:
Highlighting
More like this
Easy customization
Django-Taggit & Django-Tagging - Tagging
If you need a way to tag different models in your project, you need a tagging application.
Django-taggit & Django-tagging provide the ability to add tag fields in your models, and some othe useful related features. Just one application and you can enable tagging on all the models you want.
When i started to learn Django i needed a tagging application, at the time the standard way was Django-tagging, and i'm using it with this blog too.
Django-taggit seems now a better choice, because Django-tagging haven't been updated since long time, and some problems (like deleted objects that leave references to their tags) have never been resolved.
Django-taggit has also better integration in the admin, the only thing missing is a tag cloud, Django-tagging provides a template tag just for that.
Django-Filter - Filtering
If you need an application to easily create forms to filter the list of your models by their fields, you can use Django-filter
There's not too much too say about it, the behaviour and the result is similiar to the admin "list_filter" interface, try it out.
Django-Pagination - Pagination
The pagination is another common feature for websites, Django-pagination gives you a template tag to slice your model querysets directly in your templates, it's really easy to use, the best i found so far.
Celery - Delayed Execution
You should, as a web developer, have faced a common problem with your websites: time-consuming operations. For long tasks that users don't immediately care about (and also the other ones), with Django, you can use Celery.
Celery let you create tasks that will run in the background, in an asynchronous way, invisible to your users, it will make your site navigation faster.
Since Celery 2.0, they changed the default ORM from Django ORM to SQLAlchemy, but you can still download the Django-celery package
Sphinx - Documentation
Writing documentation is a pain for developers, most of the time, with Sphinx it is a little easier. It generates HTML/PDFs documentation files, and you can use themes.
As the website slogan says: "Cheers for a great tool that actually makes programmers want to write documentation!". It's not always true, but it surely helps.
It isn't purely a Django thing either, it's a Python thing, but it worths the mention.
GUnicorn - Deployment
For an easier approach to deployment, check out GUnicorn
Other Packages
I just wanted to share some other projects that someone can found useful.
There is a project, called Django-basic-apps, that is a collection of common basic applications (blog, bookmarks, messages, profiles, etc..) that you can plug into your project.
My blog is based on this project, i downloaded the basic-blog application, and i customized it to suits my need. I have to warn you, i've had some trouble with it (not matching date_based urls for not-english languages, and small other things that were bad implemented/missing). But it took care of the heavy-lifting for me, and that's always a good thing.
I suggest you to check out Django-extensions too, it adds a lot of other goodies to your Django.
And for the one that think that the Django admin isn't enough.. there's an extension project for it also, it's name is Django-admin-tools. It adds customizable menus, and a really cool customizable dashboard with draggable/collapsable panels! What are you waiting for? Give it a try!
There are plenty of applications for Django around, some are awesome, but watch out, there are evil ones too. Always be sure to plug into your project applications that have, at least, unit tests for them.
One last thing, there's a site that is a reference for Django reusable applications and tools, it's Django Packages, ohhh look! South is the most downloaded application so far! ;)