Django projects

Jacob Kaplan-Moss

May 22, 2007

I’ve always thought that the sign of a healthy Open Source project is a vibrant ecosystem around that project. That’s why I’ve been thrilled to see that there are a bunch of cool third-party Django add-ons popping up. I thought I’d take a few minutes and give a shout out to some of my favorites.

django-openid

OpenID evangelist and Alpha Geek Extraordinare Simon Willison wrote this set of tools which lets your Django application become an OpenID consumer.

Once you’ve wired the app up in your settings file, you’ll have access to a user’s OpenID information from your views:

def example_view(request):
    if request.openid:
        return HttpResponse("OpenID is %s" % escape(str(request.openid)))
    else:
        return HttpResponse("No OpenID")

You can read more in the documentation, see in in action on Simon’s site, and provide feedback on the mailing list.

django-registration

Written my friend and co-worker James, django-registration is a simple generic user-registration app that compliments the built-in Django auth system. It couldn’t be simpler; you just include the registration URLs and point your users to /accounts/register/. It Just Works™.

For more information you can check out the ReadMe.

django-tagging

In just a few lines of code you can add tagging to any model you like and easily pull out objects by tag usage, tag clouds for particular objects, etc. A bit of a self-link — I contributed a smidge of code — but it’s really an awesome app.

You might start a del.icio.us clone with something like:

from django.db import models
from tagging.fields import TagField

class Bookmark(models.Model):
    title = models.CharField(maxlength=200)
    url = models.URLField()
    tags = TagField()

… which would let you deal with tags in a very easy manner:

>>> b = Bookmark.objects.get(...)
>>> b.tags = "foo bar baz"

The main developer, Jonathan Buchanan, has written fantastic documentation, and the code is totally solid.

django-voting

Another app by Jonathan. He took the one-off voting code I wrote for CheeseRater as part of my PyCon tutorial and fleshed it out into a great tool. Here’s an example from the documentation:

>>> user = User.objects.get(pk=1)
>>> widget = Widget.objects.get(pk=1)
>>> Vote.objects.record_vote(user, widget, +1)
>>> Vote.objects.get_score(widget)
{'score': 1, 'num_votes': 1}

Jeff added it to Lost-Theories earlier this week (see it in action) and tells me it couldn’t be easier.

A good way to get started might be to read about how you’d go about implementing reddit style voting for any model.

Any more?

Are there cool third-party Django tools you’ve been using lately? Leave some links in the comments; I’d love to check ‘em out!

Comments:

Jeff Croft:

DAMMIT. You've got to be kidding me. I littlerly was half way through writing this EXACT SAME blog post. Grrrr....

Marty Alchin:

Well, I won't push django-values yet, because it still has a good bit of work to be done, but I do have to correct your tagging example. You have models.TagField even though it was imported simply as TagField.

Jacob:

Thanks for the bug fix, Marty. I actually intentionally left out django-values since I expect it to become a contrib app relatively soon; I think it'll really come into its own as a useful tool once it ships with Django.

Simon Litchfield:

I was pretty amazed with GeoDjango. We used it for a project recently, half expecting we'd need to add to it, but it did everything we needed straight out of the box! A great framework for doing anything funky with Google maps, geocoding, boundaries etc.

Joel Bernstein:

See this is the problem with Django: every time I think of a cool new idea for an add-on framework, I do a quick google search and find that someone's already done it.

James Bennett:

I wasn't writing about Django applications when you published this, but I was busy doing up proper packaging and documentation of the registration app; I've left the ReadMe wiki page in place, but now it just links to the documentation in SVN (which is in reST format and so can easily be transformed into whatever):

http://django-registration....

Jonathan Buchanan:

Not to turn this into a love-in, but after being unconvinced with the brilliance of my own tumblelog code, I've been investigating jellyroll...

http://code.google.com/p/je...

...and finding that it's loaded with provider-y amazingness! Time to rewrite my website, methinks.

pk:

hey jacob, i would add http://www.aswmc.com/dbmigr...
as well. peter

fred:

Hi Jacob, and how about django logging?
http://code.google.com/p/dj...

Jeremy Dunck:

There are many django-* projects, and he can't very well list them all.

But here ya go:
http://www.google.com/searc...

:)

Jj:

I was surprised with how easy it was to integrate django forum and django registration to my site.
http://code.google.com/p/dj...

I am still looking for a wiki solution :-/

I tried diamanda application set, but it was too much hassle to try and integrate that with a working site.

Frédéric:

Jj, do you know Sphene Community Tools ?
Forum + Wiki

http://sct.sphene.net/wiki/...

Peter van Kampen:

The django-tagging documentation has moved I think. See:

http://django-tagging.googl...

Elizabeth:

I think that we must have a site where people can upload his components, something like djangosnippets but with the components, for example www.django-components.com ;-)

Justin:

My Django photo management application, Photologue, should be nearing a 1.0 beta release soon and anyone willing to help test it out on their platform of choice would be very much appreciated. Photologue is easy to integrate, doesn't resize or mangle your original images, allows the user to define new photo sizes right in the Django admin, provides easy Django admin thumbnails, and caches resized files for performance. The latest revisions include some nice new features like EXIF parsing, image filters, and an shell script for administration. It also serves as a drop-in photo gallery system.

http://code.google.com/p/dj...

Leave a comment:

Use your real name, or risk deletion.

Optional.

No markup allowed. Linebreaks will be converted; links will be linkified.

Be nice; don't be that guy.