Django
The Next Generation Bounty Hunt...err
Web Application Framework
My Experience
• I am NOT an experienced web
application developer.
• Mac pundit, UNIX guru
• I HATE web browser overload.
• Desktop Apps rule.
• Web Apps have their place.
So Why Bother
• Like I said, web apps have their place
• A web browser provides ability to
view, edit and modify fairly linear
documents.
• Google Apps is an abuse.
• We all have web browsers, and the
web is the generic starting point
for providing information via
What I have I tried
• PHP
• Yuck.
• Inelegant.
• Boring, but
functional.
• Lots of CMSs
built on it.
Plone
• An interesting
platform - Python
based.
• Complicated as all
heck.
• Breaks at the
slightest breeze.
• Result: I hated
using it.
TurboGears
• Finally, a
framework I
thought would beat
everything
• Pre-built parts -
widgets, easy
templating.
• Result: Widgets
never really worked
for me!
and now, Django.
• Django designed for
a publishing
environment.
• Prebuilt ‘apps’ for
back-end admin,
RSS, comments,
registration, etc.
• Excellent
documentation.
• Simple, but
Django is a high-level Python Web
framework that encourages rapid
development and clean, pragmatic
design.
• Object-relational mapper
• Automatic admin interface
• Elegant URL design
• Template system
• Cache system
• Internationalization
Object-relational mapper
• Each attribute of the
model represents a from django.db import models
database field.
class Person(models.Model):
first_name = models.CharField(max_length=30)
• Model metadata goes in last_name = models.CharField(max_length=30)
an inner class named
Meta.
• Metadata used for Valid Database Types:
admin site goes into an postgresql_psycopg2
inner class named postgresql
Admin. mysql
sqlite3
• Django gives you an
automatically-generated ado_mssql
database-access API.
Automatic admin
interface
• The tedious problem
of providing an
admin interface
already solved.
• Helps provide a
clear distinction
between content
publishers and the
public.
Elegant URL design
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^articles/2003/$', 'news.views.special_case_2003'),
(r'^articles/(\d{4})/$', 'news.views.year_archive'),
(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'),
(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'),
)
• “Cruft-free URLs”
• Mappings done with RegEx to callback
functions.
• On match, passes a request object and
capture URL parameters.
• Easy reference in templates for perfect
URLs
Template system
•
{% extends "base_generic.html" %}
Uses their own
templating system {% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
• Template is simply a
text file, not limited {% for story in story_list %}
<h2>
to XML, HTML. Can <a href="{{ story.get_absolute_url }}">
{{ story.headline|upper }}
be used for any text </a>
</h2>
format (e.g. e-mails, <p>{{ story.tease|truncatewords:"100" }}</p>
CSV) {% endfor %}
{% endblock %}
Sites that use Django
• lawrence.com - An • LJWorld.com - An
internationally industry-leading
renowned local- newspaper site.
entertainment site
• Tabblo -An innovative
• washingtonpost.com - photo-sharing site, with
The Washington Post's a narrative twist.
growing selection of
innovative Web • Toronto Life - Toronto's
database applications. city magazine.
• chicagocrime.org -A • lawrencechamber.com -
freely browsable A Chamber of
database of crimes Commerce site that
reported in Chicago. doesn't suck.
Fin
• Django adheres to the DRY principle:
“Don’t Repeat Yourself”
• Its strengths:
• Pre-built ‘applications’
• Powerful templating
• Flexible database abstraction
Fin
• Weakness
• No official AJAX support yet.
• Designed to be tightly integrated
with Django’s templating system.
• It’s the web.