Django First Impressions

Posted 16 May 07 under , ,

I’ve spent a fair bit of time playing with the Django web framework over the last few weeks. It’s been interesting to compare and contrast it with my current favorite, Ruby on Rails. Both use the MVC design pattern (or in Django’s case, MVT — more on that later), both are written in high-level scripting languages, and both have passionate communities surrounding them. Here are some of my initial impressions.

Admin Interface

This is TOO SWEET. Django will automatically build an administrative interface for your web application using the model definitions you create. At first, I dismissed this as similar to RoR’s scaffolding feature: great for marketing purposes (see the famous 15 Minute Blog video), but functionally useless for anything but the most basic application. But no! This is the real deal — beautiful, tweakable, production-ready administrative interfaces that free up developer time for more creative enterprises. I’m in love. I wonder if I can find something similar as a Rails plugin?

Relationship Modeling for Dummies

Defining the relationships between your Django models is a very simple and elegant affair. In my Post class, I have the following:

class Post(models.Model):
  author = models.ForeignKey(User)
  tags = models.ManyToManyField(Tag)

These two lines tell Django that each post has one author and many tags, each of which might be associated with many posts. From there, Django will automatically add an “author_id” field to the Post model and create a “post_tag” table to tie posts and tags together. I haven’t yet tried to model more complex relationships, such as a three-way join or a join containing additional information describing the relationship. Although intended to save time and simplify object modeling, I could see this feature costing more time and effort than it saves in some complex cases.

Database Management

Django lacks anything as sophisticated as RoR’s migration system for modifying databases. You can easily create a database from your model definitions, but you’re on your own if you want to create new models or update existing ones without upsetting the data already in place. A database management system would go a long, long way toward bringing Django up to speed with Rails; it looks like there are some efforts underway to make this happen.

Conventions

It seems like Django places an emphasis on decoupling the different parts of an application, to the detriment of those wanting to build something small and self-contained. For example, in Django …

  1. You create a “project”, and then within that project, you can create multiple “apps”. I’m just trying to make a blog, not Microsoft Office.
  2. Rather than storing your templates with the other files of an application, Django has you store them in a completely separate location, and then point to that location in your settings file.
  3. Serving non-Python files, like images and stylesheets, is more complex than it should be. I really like the way Rails handles these resources, with a “public” directory.
  4. Finally, the “view” receives user input, interacts with the models, and then calls a “template” to display the results. I thought the model-view-controller paradigm was fine the way it was — why mess with it?

Finally

Overall, I’m impressed. The Django framework has a lot going for it. If I were going to rebuild this website today, the administrative interface generation and efficient modeling techniques would make choosing it extremely tempting. Additionally, I think Django would be ideal for a beginning web programmer — I can’t imagine you’d need much technical experience to create a full-featured site, at least until it comes time to get the thing hosted :)

I’ll be very curious to see how Django develops as it approaches version 1.0 and beyond. Will it move toward simple and streamlined, powerful and complex, or some incredible combination of the two?

Further reading on the Django framework:

Comments
  1. Personally, I’m in love with Camping for the sheer simplicity and elegance. It’s very similar to Rails, but much slimmer. Undoubtedly worse for larger-scale projects, but tons of fun for personal webapps.

    Alpha Chen · May 16, 11:49 AM · #
  2. Thanks, Alpha. I’d heard a little about Camping, but nothing about what it’s actually like to work with it. I’ll definitely check it out.

    David · May 17, 05:29 AM · #
Leave a Comment (please be nice/human)
Name
Email
http://
Message
Textile Help


About David

pic of david David Eisinger is a Web Programmer in lovely Durham, North Carolina . When he’s not working on this site, he enjoys playing music and taking photographs. Take a look at (most of) his online activities, or feel free to contact him.

Status (via Twitter)

"This episode of 'Raising the Bar' brought to you by Viagra." AWESOME.

Recent Photos (via Flickr)