The web framework for perfectionists with deadlines



James Casey
2nd October 2009
What’s Django?
“Django is a high-level Python Web framework that
encourages rapid development and clean, pragmatic
design.”



from http://djangoproject.org/
Whence Django ?
‣ Internal project of newspaper in 2003
  ‣ Lawrence Journal-World
‣ Should help journalist meet faster deadlines
‣ Should not stand in the way of journalists
‣ Named after the famous guitarist Django
  Reinhardt
Django in the news

     ‣ http://mps-expenses.guardian.co.uk/
     ‣ MP expense scandal
        ‣ crowdsourcing the review of 500K
          documents
        ‣ 7 days from proof-of-concept to launch


http://simonwillison.net/2009/talks/europython-crowdsourcing/
Django won a pulitzer

     ‣ http://polifact.com/
        ‣ Fact checking in 2008 US presidental
          election
     ‣ Lead developer was former journalist
        ‣ It was his first django application


http://www.mattwaite.com/posts/2007/aug/22/announcing-politifact/
Overview
Principles
‣ DRY (Don’t Repeat Yourself)
‣ Write less code
‣ Make CRUD easy
‣ DB neutral
 ‣ Oracle, MySQL, PostgreSQL, SQLlite
‣ Deployment platform neutral
 ‣ mod_python, WSGI, ...
It’s (just) python
Features
‣ Object-relational mapping (ORM)
‣ Automatic admin interface
‣ Elegant URL design
‣ Template system
‣ Caching
‣ i18n
Architecture

             Browser


  Template             URL


              Views


             Models


         Database
Model-Template-View

‣ Models : What things are

‣ Views : How things are processed

‣ Templates : How things are presented
Models
from django.db import models

class Author(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()
   friends = models.ManyToManyField('self', blank=True)

class Publisher(models.Model):
   name = models.CharField(max_length=300)
   num_awards = models.IntegerField()

class Book(models.Model):
   isbn = models.CharField(max_length=9)
   name = models.CharField(max_length=300)
   pages = models.IntegerField()
   price = models.DecimalField(max_digits=10, decimal_places=2)
   rating = models.FloatField()
   authors = models.ManyToManyField(Author)
   publisher = models.ForeignKey(Publisher)
   pubdate = models.DateField()
Represents the
          database objects
BEGIN;
CREATE TABLE `tutorial_author` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(100) NOT NULL,
    `age` integer NOT NULL
);
CREATE TABLE `tutorial_publisher` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(300) NOT NULL,
    `num_awards` integer NOT NULL
);

...
...

COMMIT;
ORM
books = Book.objects.all()

books_this_year = Book.objects.filter(pubdate__gt = jan_1st)

apress_books = Book.objects.filter(publisher__name = ‘Apress’)




     ‣ Never write SQL again
       ‣ Unless you really need to
Views
‣ Where all the magic happens
‣ Normally :
 ‣ Process model instances
 ‣ Render HTML
‣ Keep your logic in the model !
import datetime

def view_latest_books(request):
    # Last 5 days
    date = datetime.datetime.now() -
                       datetime.timedelta(5)
    books = Book.objects.filter(pubdate__gte =
                                date).order_by('-pubdate')

   return render_to_response('tutorial/show_books.html',
                             {'books': books})
Templates

‣ Separate design from code

‣ Separate designers from code

‣ Separate design from developers
“base.html”



<html>
  <head>
    <title>{% block title %}{% endblock %}</title>
  </head>
  <body>
    {% block content %}{% endblock %}
  </body>
</html>
“index.html”

{% extends "tutorial/base.html" %}
{% block title %}Homepage{% endblock %}
{% block content %}
  {% for book in books %}
    <h4>{{ book.name }}</h4>
    <p>Publisher: {{ book.publisher }}</p>
    <p>Date of Publication: {{ book.pubdate|date }}</p>
    <p>Price ${{ book.price }}</p>
    <p>Author : {% for a in book.authors.all %}{{ a.name }}{% if not
forloop.last %}, {% endif %}{% endfor %}</p>
  {% endfor %}
{% endblock %}
Security advantages
‣ No raw SQL from the users
 ‣ We deal with models and queries
‣ Automatic HTML escaping
 ‣ No XSS attacks
‣ CSRF protection
 ‣ No replay of forms by other code
This cannot happen !
URLs

urlpatterns = patterns('apps.tutorial.views',
    (r'^$', 'index'),

    (r’^book/<?P<id>d+)/$’, ‘show_book’),
    (r'^latest/(?P<num_days>d+)/$', 'view_latest_books'),
    (r'^create/$', 'create'),
)




       ‣ URLs map to views (via regular expressions)
http://example.com/tutorial/

http://example/com/tutorial/books/

http://example.com/tutorial/create/

http://example.com/tutorial/latest/5/
Views are just python
          functions
import datetime

def view_latest_books(request, num_days):
    date = datetime.datetime.now() -
                       datetime.timedelta(int(num_days))
    books = Book.objects.filter(pubdate__gte =
                                date).order_by('-pubdate')

   return render_to_response('books/show_books.html',
                             {'books': books})
Aggregation
      ‣ When you need to summarise a collection
        of objects
         ‣ Leveraging the DB where possible

  > q = Book.objects.annotate(num_authors=Count('authors'))
  > [b.num_authors for b in q]
  [2, 3, 1]
  > Store.objects.aggregate(min_price=Min('books__price'),
                            max_price=Max('books__price'))
  {‘min_price’ : 2.99, ‘max_price’ : 29.99}



http://docs.djangoproject.com/en/dev/topics/db/aggregation/
Other features
‣ Forms
‣ Generic Views
 ‣ Makes CRUD simple
‣ User management
‣ i18n
My first django project
Projects contain Applications
                       Project


                  my
                                  myapp
               other_app

                      reuseable
                         app


‣ Application : self-contained set of functions
‣ Project : collection of applications, installed
  into same database
  ‣ roughly project == a web application - has a
    settings file
Getting started
‣ Install Django 1.1
 > easy_install django

‣ Create a project
 > django-admin.py startproject new_django_project

   new_django_project/
       __init__.py
       manage.py
       settings.py
       urls.py
> ./manage.py startapp tutorial


 new_django_project/
     __init__.py
     manage.py
     settings.py
     tutorial/
         __init__.py
         models.py
         tests.py
         views.py
     urls.py
> ./manage.py runserver
Validating models...
0 errors found

Django version 1.1, using settings 'new_django_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
...


‣ Now you write your code ...
> ./manage.py syncdb
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table tutorial_author
Creating table tutorial_publisher
Creating table tutorial_book
Creating table tutorial_store
Installing index for tutorial.Book model
automatic admin interface


   http://localhost:8000/admin/tutorial/
manage.py
‣ syncdb : create SQL for your models
‣ shell : start up a python shell with your
  django project loaded
‣ test : run your unit tests
    ‣ you did write some, didn’t you ?
‣ inspectdb : reverse engineer models for
  existing DB
‣ loaddata / dumpdata : load/dump your
  fixtures from a DB
Tools to make you
 more productive
   all just an easy_install away
distutils
‣ ‘standard’ python packaging
  ‣ ./setup.py sdist : source packages
  ‣ /.setup.py bdist : binary packages
‣ Nice to integrate with other tools
  ‣ pip, unittest, ...
‣ ./setup.py bdist_rpm : Can produce rpm
Virtualenv
‣ Run separate python environments
 ‣ With different sets of packages
 ‣ And even different interpreters
‣ Easily switch between then
 ‣ virtualenv_wrapper gives nice bash
   functions for it all

   http://pypi.python.org/pypi/virtualenv
ipython
‣ python with CLI hotness
 ‣ TAB autocomplete
 ‣ code coloring
 ‣ nicer pdb integration
 ‣ ...


         http://ipython.scipy.org/moin/
Introduction to Django
PIP
‣ Better installation manager
  ‣ ‘easy_install’ with dependency ordering
  ‣ Integrated with virtualenv
  ‣ Allow to ‘freeze’ a set of packages
    ‣ and re-install to the same level


       http://pypi.python.org/pypi/pip
django-debug-toolbar


  http://localhost:8000/tutorial/
django-command-extensions

 ‣ Extra manage.py commands
  ‣ shell_plus : a better python shell
  ‣ runserver_plus : a better debugging
    server (werkzeug)
  ‣ show_urls : dump the url map of your
    site
Werkzeug


http://localhost:8000/tutorial/latest/5
and of course, unittest
‣ Django supports :
 ‣ doctest : useful for simple model validation
 ‣ unittest : you did write some, didn’t you ?
 ‣ test client : acts a dummy web browser
   ‣ Test your views
 ‣ fixture loading : have a set of complex test data
   ‣ generated from your production database
reusable apps
if it’s useful, it’s probably been done before...
south

‣ Schema migration
 ‣ Change models over time
 ‣ Write upgrade routines
   ‣ just python functions with access
     to .objects and .old_objects
A platform for rapidly developing (social) websites
code.google.com

‣ just search for django-<WHATEVER> :)
‣ It’s probably there...
  ‣ If it’s not there, write it and put it there
Future
beyond django 1.1
Multi-DB

‣ Allows your models to be in multiple DBs
 ‣ Different applications in different DBs
 ‣ ‘sharding’ of objects across DBs
 ‣ using slaves for read-only operations
Other
‣ Admin UI enhancements
 ‣ autocompletion
 ‣ better inline handling
‣ Non-relational database support
   ‣ CouchDB, MongoDB, tokyo Tyrant,
     Google Bigtable, SimpleDB
want more ?
‣ http://docs.djangoproject.com/
‣ Django community RSS feed
  ‣ http://www.djangoproject.com/community/
‣ Mailing lists
  ‣ django-dev to understand how the developers
    think
  ‣ django-users to ask for help
‣ DjangoCon presentations
  ‣ http://www.djangocon.org/
Books
django-users@cern.ch
Thank you
Credits
‣ XKCD for cartoons
‣ Amazon.com for book pictures
‣ Initial inspiration for slides and examples
  from Joaquim Rocha, Abe Estrada
  ‣   http://www.slideshare.net/j_rocha/django-intro

  ‣   http://www.slideshare.net/AbeEstrada/django-web-framework-presentation-822177


‣ http://www.djangoproject.com/

More Related Content

PPTX
Django - Python MVC Framework
PDF
Django Introduction & Tutorial
ODP
Django for Beginners
PPTX
Web development with django - Basics Presentation
PDF
A Basic Django Introduction
PDF
Python Django tutorial | Getting Started With Django | Web Development With D...
PPT
Introduction To Django
PPTX
Introduction to Django
Django - Python MVC Framework
Django Introduction & Tutorial
Django for Beginners
Web development with django - Basics Presentation
A Basic Django Introduction
Python Django tutorial | Getting Started With Django | Web Development With D...
Introduction To Django
Introduction to Django

What's hot (20)

PPTX
Django Girls Tutorial
PDF
Python/Django Training
PDF
Django Tutorial | Django Web Development With Python | Django Training and Ce...
PDF
Introduction to django framework
PDF
Web Development with Python and Django
PPTX
Intro to React
PDF
The Django Web Application Framework
PPTX
Django PPT.pptx
PPTX
Flask – Python
PPTX
Introduction à spring boot
PPTX
Python/Flask Presentation
PDF
jQuery for beginners
PPT
Learn REST API with Python
PPTX
jQuery
PPTX
Spring data jpa
PPTX
Introduction to React JS
PPTX
Django Architecture Introduction
PDF
Django Framework and Application Structure
PDF
Rest api with Python
Django Girls Tutorial
Python/Django Training
Django Tutorial | Django Web Development With Python | Django Training and Ce...
Introduction to django framework
Web Development with Python and Django
Intro to React
The Django Web Application Framework
Django PPT.pptx
Flask – Python
Introduction à spring boot
Python/Flask Presentation
jQuery for beginners
Learn REST API with Python
jQuery
Spring data jpa
Introduction to React JS
Django Architecture Introduction
Django Framework and Application Structure
Rest api with Python
Ad

Viewers also liked (8)

PPTX
Tango with django
KEY
Django In The Real World
PPTX
Blog project
PPTX
Blog Project
KEY
Jumpstart Django
PDF
Two scoops of Django - Security Best Practices
PDF
Django in the Real World
PDF
12 tips on Django Best Practices
Tango with django
Django In The Real World
Blog project
Blog Project
Jumpstart Django
Two scoops of Django - Security Best Practices
Django in the Real World
12 tips on Django Best Practices
Ad

Similar to Introduction to Django (20)

PDF
GDG Addis - An Introduction to Django and App Engine
PDF
Django introduction @ UGent
PDF
The Django Book chapter 5 Models
PPTX
FULLSTACK DEVELOPMENT Module FOR ENGINEERING STUDENTS-1.pptx
DOCX
Akash rajguru project report sem v
PPT
Mini Curso Django Ii Congresso Academico Ces
PDF
django
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PDF
Django - basics
PPTX
PDF
Introduction to Python and Django
PPTX
Basic Python Django
PPTX
Django Framework Interview Question and Answer partOne.pptx
PPTX
Django course
PPTX
Django apps and ORM Beyond the basics [Meetup hosted by Prodeers.com]
PDF
PDF
Django design-patterns
GDG Addis - An Introduction to Django and App Engine
Django introduction @ UGent
The Django Book chapter 5 Models
FULLSTACK DEVELOPMENT Module FOR ENGINEERING STUDENTS-1.pptx
Akash rajguru project report sem v
Mini Curso Django Ii Congresso Academico Ces
django
The Django Web Application Framework 2
The Django Web Application Framework 2
The Django Web Application Framework 2
The Django Web Application Framework 2
Django - basics
Introduction to Python and Django
Basic Python Django
Django Framework Interview Question and Answer partOne.pptx
Django course
Django apps and ORM Beyond the basics [Meetup hosted by Prodeers.com]
Django design-patterns

More from James Casey (9)

PDF
Habitat on AKS - Demo
PPTX
Compliance at Velocity with Chef
PPTX
Chef Analytics Webinar
PDF
Chef Analytics (Chef NYC Meeting - July 2014)
PPTX
Chef Actions: Delightful near real-time activity tracking!
PDF
Chef - Configuration Management for the Cloud
PPT
WLCG Grid Infrastructure Monitoring
PPTX
1005 cern-active mq-v2
KEY
Grid Information systems from an Operations Perspective
Habitat on AKS - Demo
Compliance at Velocity with Chef
Chef Analytics Webinar
Chef Analytics (Chef NYC Meeting - July 2014)
Chef Actions: Delightful near real-time activity tracking!
Chef - Configuration Management for the Cloud
WLCG Grid Infrastructure Monitoring
1005 cern-active mq-v2
Grid Information systems from an Operations Perspective

Recently uploaded (20)

PDF
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
PPTX
From XAI to XEE through Influence and Provenance.Controlling model fairness o...
PDF
Rooftops detection with YOLOv8 from aerial imagery and a brief review on roof...
PPT
Overviiew on Intellectual property right
PPTX
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .
PDF
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
PDF
Advancements in abstractive text summarization: a deep learning approach
PPTX
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
PDF
State of AI in Business 2025 - MIT NANDA
PDF
Gestión Unificada de los Riegos Externos
PDF
Examining Bias in AI Generated News Content.pdf
PDF
TicketRoot: Event Tech Solutions Deck 2025
PDF
NewMind AI Journal Monthly Chronicles - August 2025
PDF
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
PDF
Applying Agentic AI in Enterprise Automation
PDF
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
PDF
Uncertainty-aware contextual multi-armed bandits for recommendations in e-com...
PDF
Slides World Game (s) Great Redesign Eco Economic Epochs.pdf
PDF
Human Computer Interaction Miterm Lesson
PDF
TrustArc Webinar - Data Minimization in Practice_ Reducing Risk, Enhancing Co...
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
From XAI to XEE through Influence and Provenance.Controlling model fairness o...
Rooftops detection with YOLOv8 from aerial imagery and a brief review on roof...
Overviiew on Intellectual property right
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
Advancements in abstractive text summarization: a deep learning approach
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
State of AI in Business 2025 - MIT NANDA
Gestión Unificada de los Riegos Externos
Examining Bias in AI Generated News Content.pdf
TicketRoot: Event Tech Solutions Deck 2025
NewMind AI Journal Monthly Chronicles - August 2025
The Digital Engine Room: Unlocking APAC’s Economic and Digital Potential thro...
Applying Agentic AI in Enterprise Automation
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
Uncertainty-aware contextual multi-armed bandits for recommendations in e-com...
Slides World Game (s) Great Redesign Eco Economic Epochs.pdf
Human Computer Interaction Miterm Lesson
TrustArc Webinar - Data Minimization in Practice_ Reducing Risk, Enhancing Co...

Introduction to Django

  • 1. The web framework for perfectionists with deadlines James Casey 2nd October 2009
  • 2. What’s Django? “Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.” from http://djangoproject.org/
  • 3. Whence Django ? ‣ Internal project of newspaper in 2003 ‣ Lawrence Journal-World ‣ Should help journalist meet faster deadlines ‣ Should not stand in the way of journalists ‣ Named after the famous guitarist Django Reinhardt
  • 4. Django in the news ‣ http://mps-expenses.guardian.co.uk/ ‣ MP expense scandal ‣ crowdsourcing the review of 500K documents ‣ 7 days from proof-of-concept to launch http://simonwillison.net/2009/talks/europython-crowdsourcing/
  • 5. Django won a pulitzer ‣ http://polifact.com/ ‣ Fact checking in 2008 US presidental election ‣ Lead developer was former journalist ‣ It was his first django application http://www.mattwaite.com/posts/2007/aug/22/announcing-politifact/
  • 7. Principles ‣ DRY (Don’t Repeat Yourself) ‣ Write less code ‣ Make CRUD easy ‣ DB neutral ‣ Oracle, MySQL, PostgreSQL, SQLlite ‣ Deployment platform neutral ‣ mod_python, WSGI, ...
  • 9. Features ‣ Object-relational mapping (ORM) ‣ Automatic admin interface ‣ Elegant URL design ‣ Template system ‣ Caching ‣ i18n
  • 10. Architecture Browser Template URL Views Models Database
  • 11. Model-Template-View ‣ Models : What things are ‣ Views : How things are processed ‣ Templates : How things are presented
  • 12. Models from django.db import models class Author(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() friends = models.ManyToManyField('self', blank=True) class Publisher(models.Model): name = models.CharField(max_length=300) num_awards = models.IntegerField() class Book(models.Model): isbn = models.CharField(max_length=9) name = models.CharField(max_length=300) pages = models.IntegerField() price = models.DecimalField(max_digits=10, decimal_places=2) rating = models.FloatField() authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) pubdate = models.DateField()
  • 13. Represents the database objects BEGIN; CREATE TABLE `tutorial_author` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(100) NOT NULL, `age` integer NOT NULL ); CREATE TABLE `tutorial_publisher` ( `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(300) NOT NULL, `num_awards` integer NOT NULL ); ... ... COMMIT;
  • 14. ORM books = Book.objects.all() books_this_year = Book.objects.filter(pubdate__gt = jan_1st) apress_books = Book.objects.filter(publisher__name = ‘Apress’) ‣ Never write SQL again ‣ Unless you really need to
  • 15. Views ‣ Where all the magic happens ‣ Normally : ‣ Process model instances ‣ Render HTML ‣ Keep your logic in the model !
  • 16. import datetime def view_latest_books(request): # Last 5 days date = datetime.datetime.now() - datetime.timedelta(5) books = Book.objects.filter(pubdate__gte = date).order_by('-pubdate') return render_to_response('tutorial/show_books.html', {'books': books})
  • 17. Templates ‣ Separate design from code ‣ Separate designers from code ‣ Separate design from developers
  • 18. “base.html” <html> <head> <title>{% block title %}{% endblock %}</title> </head> <body> {% block content %}{% endblock %} </body> </html>
  • 19. “index.html” {% extends "tutorial/base.html" %} {% block title %}Homepage{% endblock %} {% block content %} {% for book in books %} <h4>{{ book.name }}</h4> <p>Publisher: {{ book.publisher }}</p> <p>Date of Publication: {{ book.pubdate|date }}</p> <p>Price ${{ book.price }}</p> <p>Author : {% for a in book.authors.all %}{{ a.name }}{% if not forloop.last %}, {% endif %}{% endfor %}</p> {% endfor %} {% endblock %}
  • 20. Security advantages ‣ No raw SQL from the users ‣ We deal with models and queries ‣ Automatic HTML escaping ‣ No XSS attacks ‣ CSRF protection ‣ No replay of forms by other code
  • 22. URLs urlpatterns = patterns('apps.tutorial.views', (r'^$', 'index'), (r’^book/<?P<id>d+)/$’, ‘show_book’), (r'^latest/(?P<num_days>d+)/$', 'view_latest_books'), (r'^create/$', 'create'), ) ‣ URLs map to views (via regular expressions)
  • 24. Views are just python functions import datetime def view_latest_books(request, num_days): date = datetime.datetime.now() - datetime.timedelta(int(num_days)) books = Book.objects.filter(pubdate__gte = date).order_by('-pubdate') return render_to_response('books/show_books.html', {'books': books})
  • 25. Aggregation ‣ When you need to summarise a collection of objects ‣ Leveraging the DB where possible > q = Book.objects.annotate(num_authors=Count('authors')) > [b.num_authors for b in q] [2, 3, 1] > Store.objects.aggregate(min_price=Min('books__price'), max_price=Max('books__price')) {‘min_price’ : 2.99, ‘max_price’ : 29.99} http://docs.djangoproject.com/en/dev/topics/db/aggregation/
  • 26. Other features ‣ Forms ‣ Generic Views ‣ Makes CRUD simple ‣ User management ‣ i18n
  • 27. My first django project
  • 28. Projects contain Applications Project my myapp other_app reuseable app ‣ Application : self-contained set of functions ‣ Project : collection of applications, installed into same database ‣ roughly project == a web application - has a settings file
  • 29. Getting started ‣ Install Django 1.1 > easy_install django ‣ Create a project > django-admin.py startproject new_django_project new_django_project/ __init__.py manage.py settings.py urls.py
  • 30. > ./manage.py startapp tutorial new_django_project/ __init__.py manage.py settings.py tutorial/ __init__.py models.py tests.py views.py urls.py
  • 31. > ./manage.py runserver Validating models... 0 errors found Django version 1.1, using settings 'new_django_project.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. ... ‣ Now you write your code ... > ./manage.py syncdb Creating table django_content_type Creating table django_session Creating table django_site Creating table tutorial_author Creating table tutorial_publisher Creating table tutorial_book Creating table tutorial_store Installing index for tutorial.Book model
  • 32. automatic admin interface http://localhost:8000/admin/tutorial/
  • 33. manage.py ‣ syncdb : create SQL for your models ‣ shell : start up a python shell with your django project loaded ‣ test : run your unit tests ‣ you did write some, didn’t you ? ‣ inspectdb : reverse engineer models for existing DB ‣ loaddata / dumpdata : load/dump your fixtures from a DB
  • 34. Tools to make you more productive all just an easy_install away
  • 35. distutils ‣ ‘standard’ python packaging ‣ ./setup.py sdist : source packages ‣ /.setup.py bdist : binary packages ‣ Nice to integrate with other tools ‣ pip, unittest, ... ‣ ./setup.py bdist_rpm : Can produce rpm
  • 36. Virtualenv ‣ Run separate python environments ‣ With different sets of packages ‣ And even different interpreters ‣ Easily switch between then ‣ virtualenv_wrapper gives nice bash functions for it all http://pypi.python.org/pypi/virtualenv
  • 37. ipython ‣ python with CLI hotness ‣ TAB autocomplete ‣ code coloring ‣ nicer pdb integration ‣ ... http://ipython.scipy.org/moin/
  • 39. PIP ‣ Better installation manager ‣ ‘easy_install’ with dependency ordering ‣ Integrated with virtualenv ‣ Allow to ‘freeze’ a set of packages ‣ and re-install to the same level http://pypi.python.org/pypi/pip
  • 41. django-command-extensions ‣ Extra manage.py commands ‣ shell_plus : a better python shell ‣ runserver_plus : a better debugging server (werkzeug) ‣ show_urls : dump the url map of your site
  • 43. and of course, unittest ‣ Django supports : ‣ doctest : useful for simple model validation ‣ unittest : you did write some, didn’t you ? ‣ test client : acts a dummy web browser ‣ Test your views ‣ fixture loading : have a set of complex test data ‣ generated from your production database
  • 44. reusable apps if it’s useful, it’s probably been done before...
  • 45. south ‣ Schema migration ‣ Change models over time ‣ Write upgrade routines ‣ just python functions with access to .objects and .old_objects
  • 46. A platform for rapidly developing (social) websites
  • 47. code.google.com ‣ just search for django-<WHATEVER> :) ‣ It’s probably there... ‣ If it’s not there, write it and put it there
  • 49. Multi-DB ‣ Allows your models to be in multiple DBs ‣ Different applications in different DBs ‣ ‘sharding’ of objects across DBs ‣ using slaves for read-only operations
  • 50. Other ‣ Admin UI enhancements ‣ autocompletion ‣ better inline handling ‣ Non-relational database support ‣ CouchDB, MongoDB, tokyo Tyrant, Google Bigtable, SimpleDB
  • 52. ‣ http://docs.djangoproject.com/ ‣ Django community RSS feed ‣ http://www.djangoproject.com/community/ ‣ Mailing lists ‣ django-dev to understand how the developers think ‣ django-users to ask for help ‣ DjangoCon presentations ‣ http://www.djangocon.org/
  • 53. Books
  • 56. Credits ‣ XKCD for cartoons ‣ Amazon.com for book pictures ‣ Initial inspiration for slides and examples from Joaquim Rocha, Abe Estrada ‣ http://www.slideshare.net/j_rocha/django-intro ‣ http://www.slideshare.net/AbeEstrada/django-web-framework-presentation-822177 ‣ http://www.djangoproject.com/