Django is a web framework designed to help you build complex web applications simply and quickly. It’s written in the Python programming language.
Django takes it name from the early jazz guitarist Django Reinhardt, a gypsy savant who managed to play dazzling and electrifying runs on his instrument even though two of the fingers on his left hand were paralyzed in an accident when he was young.
Thus, it’s a fitting name for the framework: Django can do some very complex things with less code and a simpler execution than you’d expect. It doesn’t take a heavy hand to build with Django. The framework does the repetitive work for you, allowing you to get a working website up quickly and easily.
Django’s DRY pledge
Django was designed from the ground up to handle two common web developer challenges: intensive deadlines and strict adherence to the Don’t Repeat Yourself (DRY) principle. DRY sounds exactly like what it is: Why write the same code over and over again?
The result is a fast framework, nimble and capable of generating full site mockups in a very short time. Django’s slogan captures its essence quite nicely: “The web framework for perfectionists with deadlines.”
But quick doesn’t mean sloppy. Django comes with a slick built-in section for administering sites. The admin section supports a variety of caching options (including Memcached) and a host of other stable, scalable tools.
Perhaps the best part about Django is its outstanding documentation. Unlike many open source projects, Django has very thorough and readable docs available online. If you have any problems with our tutorials, head over to the Django site for additional reading. Also consider joining the django-users Google Groupwhich is full of helpful folks who can point you in the right direction if you run into trouble.
Before we dive in, it’s worth pausing for a moment to understand where Django comes from, which has influenced both what it is and what it is not.
Django was developed over a two year period by programmers working for an online news operation, theLawrence Journal-World Online in Lawrence, Kansas. Eventually, the team realized it had a real framework on its hands and released the code to the public under an open-source BSD license.
Once it became a community project, the development took off and Django began to pop up all over the web. For a complete list of Django sites, check out Django Sites. Notable examples include Pownce, The Washington Post and Everyblock.
Perhaps the most common misconception about Django is that it’s a content management system. It’s not. It’s a web framework. It is a tool in which to build a CMS, like Drupal or other systems, but not one in itself.
Django is designed to work in a slightly modified Model-View-Controller (MVC) pattern. MVC is a software engineering architecture concept describing how a program can change the visual aspect and the business aspect without affecting one another. The original Django developers refer to it as a model, template and view (MTV) framework.
However, in Django’s vision of MVC development, the “view” refers to the data presented to user. Mind you, not how data looks, but which data. In other words, to quote the Django documentation, “the view describes which data you see, not how you see it.”
It leaves the “how” to an additional element found in Django: the template.
Why isn’t Django a 1.0 release?
It is! Django was released as 1.0 on September 3rd, 2008. Django 1.1 was released on July 29, 2009.
Django was designed to make web development fast and easy — dare we say, even fun. And by fast, they mean fast. Once you’re comfortable with Django, it’s not hard to go from a simple wireframe to a working demo site in an hour or so.
For development purposes, Django is entirely self-contained. It includes a command line interface, a web server and everything you need to get up and running without installing anything other than Django.
That said, the web server included with Django is not intended to be used in a production environment. The preferred method is to run Django through
mod_wsgi. Don’t worry, we’ll get to
mod_wsgi in our more advanced tutorial. First, let’s look at how you might go about building a Django application.
As it turns out, building a Django app actually takes much less time than explaining how to build it.
Before we start building sites, it’s worth asking: What do you mean by building a Django app? Django’s official documentation and many of its built-in tools are set up to create projects, or containers for your whole site. Within projects you have many apps, or sections of your site.
Apps don’t need to be in projects, and in many cases it’s better not to put them there.
For the sake of example, here’s a very high-level overview of how a Django app is built:
First, create a project using the built in command line tool (
python django-admin.py startproject projectname). This will generate a new folder containing the project’s base settings file which you can use to specify database connections, template locations and more. Also in the folder is urls.py, which defines your base URLs and manage.py, which contains a standard set of command line tools.
Next, create an app using the built in command line tool
python manage.py startapp appname.
Once the app folder is in place, look inside. You’ll see three files:
views.py. These are the files you’ll use to actually build the app:
models.pyto design your model
urls.pyto write your URLs
views.pyto create your views
Django includes its own template language, but as with many elements of Django, using it entirely optional. You can drop in another template language if you like, but you might want to give Django’s a try first. It’s simple and fast, and it’s already there.
The other thing to keep in mind is that Django is written in Python and requires Python 2.3 or higher. Mac OS X and most Linux distros ship with Python 2.5, so you shouldn’t have any problems. Windows users, however, may need to install Python separately.
So how does Django work?
The simplest way to look at Django is to break it down into its component parts. First off, there’s a
models.py file which defines your data model by extrapolating your single lines of code into full database tables and adding a pre-built (totally optional) administration section to manage content.
The next element is the
urls.py file which uses regular expressions to capture URL patterns for processing.
The actual processing happens in your views which, if you haven’t seen the pattern yet, live in
views.py. This is really the meat of Django, since views are where you grab the data you’re presenting to the visitor.
Here’s what happens when a visitor lands on your Django page:
1. First, Django consults the various URL patterns you’ve created and uses the information to retrieve a view.
2. The view then processes the request, querying your database if necessary.
3. The view passes the requested information on to your template.
4. The template then renders the data in a layout you’ve created and displays the page.
Now you have at least some idea of how Django works, you’re ready to dive in and get your hands dirty. It’s really the best way to learn. For the sake of example, we’ll be building a blog-type site. It makes a nice intro to Django and takes advantage of some of Django’s handy shortcuts and other features.
We aren’t going to just build a blog, we’ll also walk through adding a contact form, static pages (like an “about” page) and even integrate it with del.icio.us web services to display all your del.icio.us bookmarks on your new Django blog.