SlideShare una empresa de Scribd logo
1 de 69
Jumpstart


                  The Web Framework
            for Perfectionists with Deadlines


                                         CPOSC
Rob Yates                                October, 2009
Topics
Topics
• What is Django
Topics
• What is Django
• History of Django
Topics
• What is Django
• History of Django
• Whirlwind Tour
Topics
• What is Django
• History of Django
• Whirlwind Tour
• How to Get Started - Admin Demo
Topics
• What is Django
• History of Django
• Whirlwind Tour
• How to Get Started - Admin Demo
• Killer Features
Topics
• What is Django
• History of Django
• Whirlwind Tour
• How to Get Started - Admin Demo
• Killer Features
• Application Re-use and Pinax
Topics
• What is Django
• History of Django
• Whirlwind Tour
• How to Get Started - Admin Demo
• Killer Features
• Application Re-use and Pinax
• Framework Death-match
What is Django?
What is Django?
•   Not a Gypsy Jazz Guitarist
What is Django?
•   Not a Gypsy Jazz Guitarist

•   Web Application
    Development Framework
    written in and for Python
What is Django?
•   Not a Gypsy Jazz Guitarist

•   Web Application
    Development Framework
    written in and for Python

•   Not a CMS System
What is Django?
•   Not a Gypsy Jazz Guitarist

•   Web Application
    Development Framework
    written in and for Python

•   Not a CMS System

•   Sometimes called Python’s
    Ruby on Rails (RoR)
It all started
                          HERE




Photo by Jeff Croft
Simon Willison




Adrian Holovaty
PyCon 2005
Major topic: Why is web development
         in Python so hard?
Jump to today:
Guiding Principles
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
• Less code
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
• Less code
• Quick development
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
• Less code
• Quick development
• DRY
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
• Less code
• Quick development
• DRY
• Explicit is better than implicit
Jump to today:
    Guiding Principles
• Loose Coupling and tight cohesion
• Less code
• Quick development
• DRY
• Explicit is better than implicit
• Consistency
For Free!!!
           • Very Useful Admin CRUD
           • Templating - lots of useful rendering bits
           • Form Handling
           • i18n - full Unicode support
           • Sessions / User Auth / Role-based Perms
           • Object-Relational Mapping
Beer photo by Lori Spindler
Model View Controller
Model View Controller

            Model
            View
            Template
Models
Templates




            App
 Views

 Models
Templates
            App

 Views
                  Site




 Models
Templates
            App




 Views

    Settings
     URLs
                         Django App Structure




   Templates
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Deep Dive: Models
from tagging.fields import TagField

class Post(models.Model):
  author = models.ForeignKey(Author)
  title = models.CharField(max_length=200)
  slug = models.SlugField(max_length=200, unique_for_month='pub_date')
  body = models.TextField()
  TYPE_CHOICES = (
    ('rant', 'Rant'),
    ('tirade', 'Tirade'),
  )
  type = models.CharField(choices=TYPE_CHOICES, max_length=50)
  pub_date = models.DateTimeField(auto_now_add=True)
  is_active = models.BooleanField(default=True)
  tags = TagField(blank=True, null=True)

  class Meta:
    unique_together = ('title', 'type')
    ordering = ['-pub_date']
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Deep Dive: DB API
post = Post(title=‘Foo’, body=‘Bar’)
post.type = ‘rant’
post.save()
Deep Dive: DB API
post = Post(title=‘Foo’, body=‘Bar’)
post.type = ‘rant’
post.save()

posts = Post.objects.all()

posts = Post.objects.all()[:5]

posts = Post.objects.filter(post_type=‘rant’)

posts = Post.objects.filter(author__name=‘Rob’)

posts = Post.objects.filter(author__name=‘Rob’).
    filter(title__contains=‘django’).order_by(‘type’)

post = Post.objects.get(id=24)
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Deep Dive: Forms
# Basic Form
class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)
Deep Dive: Forms
# Basic Form
class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)



# Form based on a model
class PostForm(forms.ModelForm):
    class Meta:
        model = Post
Deep Dive: Views
def posts_by_type(request, type):
    posts = Post.objects.filter(type=type)

    return render_to_response(
            ‘postsbytype.html’, {‘posts’: posts})
Deep Dive: Views
def posts_by_type(request, type):
    posts = Post.objects.filter(type=type)

    return render_to_response(
            ‘postsbytype.html’, {‘posts’: posts})


def new_post(request):
    if request.method == ‘POST’:
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = PostForm()
    return render_to_response(
            ‘mytemplate.html’, {‘form’: form})
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Deep Dive: URLs
urlpatters = patterns(‘’,
    (’^my/favorite/color/$’, ‘blog.views.my_fav_color’),
    (‘^post/new/$’, ‘blog.views.new_post’),



    (‘^posts/(d{4})/$’, ‘blog.views.year_archive’),
    (‘^posts/(d{4})/(d{2})/$’, ‘blog.views.month_archive’),



    (‘^posts/(?P<slug>[a-z-]*)/$’, ‘blog.views.show_post’),



    (‘^events/$’, include(events.urls),
)
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Deep Dive: Templates
<html><body>
   {% if posts %}
      {% for post in posts %}
         {{ post.author }}: {{ post.title }}
      {% endfor %}
   {% endif %}
Deep Dive: Templates
<html><body>
   {% if posts %}
      {% for post in posts %}
         {{ post.author }}: {{ post.title }}
      {% endfor %}
   {% endif %}


<form method=”post”>
   <table>
      {{ form }}
   </table>
</form>
Deep Dive: Templates
<html><body>
   {% if posts %}
      {% for post in posts %}
         {{ post.author }}: {{ post.title }}
      {% endfor %}
   {% endif %}


<form method=”post”>
   <ul>
      {{ form.as_ul }}
   </ul>
</form>
Architecture
                       RDBMS

   Storage             ORM        Fixtures

                       Model

Signals        Forms              Template

URL Resolver           View    Template Loader


 Middleware                      Middleware

   Request                        Response
Getting Started
• Pure Python - no compiled code
• No dependencies (with the exception of
  the database adapter of your choice
• Three-step install
 • D/L and extract tar
 • Run setup.py
 • Add django-admin.py to path (optional)
Initialize Your Project
$ django-admin.py startproject mysite
$ cd mysite
$ python manage.py startapp myapp
$ edit settings.py and set DB Info
$ python manage.py runserver


        http://localhost:8000
Killer Features
•   Legacy DB            •   Generic Views

•   Test Framework       •   Template Inheritance

•   Multi-DB             •   Tempalte Filters

•   Geodjango            •   Humanize

•   Aggregation          •   Runs on Jython /
                             IronPython
•   JSON Serializer

•   Stable API Promise   •   Google AppEngine!

•   Fantastic Docs
Roll Your Own
• Model Managers: Custom database API for views
• Custom Template Tags: Easier to implement
  functionality without mixing logic/presentation
Roll Your Own
• Model Managers: Custom database API for views
• Custom Template Tags: Easier to implement
  functionality without mixing logic/presentation


  • ORM Layer       • Model Fields
  • Template Engine • Form Fields
  • Template Loader • URL Resolver
Re-usable Apps
         and Pinax
• Following best practices when creating
  your app allows others to plug in and use it
• Search Google Code for *django* projects
  returns 1,987 results - many are apps
• James Tauber created Django Hotclub to
  establish standards for app development
  and integration
• Hotclub later become Pinax
Framework Death-match




Photo by Bruce Turner
Death-match: RoR

•   URL Handling

    •   RoR: RESTful with HTTP verbs

    •   Django: RegEx-based URL patterns

•   JavaScript / AJAX

    •   RoR: XHR helpers with RJS, prototype, scriptaculous

    •   Django: JS framework agnostic / no helpers besides
        serialization
Death-match: RoR

•   Unicode

    •   Ruby traditionally has had issues - string is byte sequence

    •   Python is fully Unicode since v1.6 (circa 2000)

•   i18n

    •   RoR: Translations are copied - no fallback?

    •   Django: Translations use GNU gettext-style localization -
        falls back to default language
Death-match: RoR

•   Plugins

    •   RoR: Rich plugin API and structure

    •   Django: Re-usable applications

•   Automation / Build

    •   RoR: rake is a rich scripting language for automated tasks

    •   Django: manage.py can do some basic tricks - CLI
Death-match: RoR
•   Jobs: Rails jobs out-number Django jobs 6:1

•   Hype: Rails has done a fantastic job with marketing
Death-match: RoR
•   Jobs: Rails jobs out-number Django jobs 6:1

•   Hype: Rails has done a fantastic job with marketing
Recap
Recap
• Django is easy
Recap
• Django is easy
• Django is fun
Recap
• Django is easy
• Django is fun
• Django scales
Recap
• Django is easy
• Django is fun
• Django scales
• Django is maintainable
Recap
• Django is easy
• Django is fun
• Django scales
• Django is maintainable
• Django saves small kittens
Recap
• Django is easy
• Django is fun
• Django scales
• Django is maintainable
• Django saves small kittens
• It rocks - USE IT!
Resources
• http://djangoproject.com
 • Check out the tutorial!
• http://docs.djangoproject.com
• http://djangodose.com
• http://www.b-list.org/
• http://pinaxproject.com
• http://code.google.com/hosting/search?
  q=label%3aDjango
Thanks!
 rob@robyates.org

Twitter: @Rob_Yates
 http://robyates.org

Más contenido relacionado

La actualidad más candente

Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Jacob Kaplan-Moss
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersRosario Renga
 
Building Pluggable Web Applications using Django
Building Pluggable Web Applications using DjangoBuilding Pluggable Web Applications using Django
Building Pluggable Web Applications using DjangoLakshman Prasad
 
Best Practices for Front-End Django Developers
Best Practices for Front-End Django DevelopersBest Practices for Front-End Django Developers
Best Practices for Front-End Django DevelopersChristine Cheung
 
Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics PresentationShrinath Shenoy
 
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Michael Pirnat
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC FrameworkBala Kumar
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with DexterityDavid Glick
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance RecipesJon Atkinson
 
API Design & Security in django
API Design & Security in djangoAPI Design & Security in django
API Design & Security in djangoTareque Hossain
 
Unbreaking Your Django Application
Unbreaking Your Django ApplicationUnbreaking Your Django Application
Unbreaking Your Django ApplicationOSCON Byrum
 
Dexterity in the Wild
Dexterity in the WildDexterity in the Wild
Dexterity in the WildDavid Glick
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJames Casey
 
django Forms in a Web API World
django Forms in a Web API Worlddjango Forms in a Web API World
django Forms in a Web API WorldTareque Hossain
 

La actualidad más candente (19)

Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)Introduction To Django (Strange Loop 2011)
Introduction To Django (Strange Loop 2011)
 
Django a whirlwind tour
Django   a whirlwind tourDjango   a whirlwind tour
Django a whirlwind tour
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Building Pluggable Web Applications using Django
Building Pluggable Web Applications using DjangoBuilding Pluggable Web Applications using Django
Building Pluggable Web Applications using Django
 
Best Practices for Front-End Django Developers
Best Practices for Front-End Django DevelopersBest Practices for Front-End Django Developers
Best Practices for Front-End Django Developers
 
Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics Presentation
 
Django by rj
Django by rjDjango by rj
Django by rj
 
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
Shiny, Let’s Be Bad Guys: Exploiting and Mitigating the Top 10 Web App Vulner...
 
Django - Python MVC Framework
Django - Python MVC FrameworkDjango - Python MVC Framework
Django - Python MVC Framework
 
Building Content Types with Dexterity
Building Content Types with DexterityBuilding Content Types with Dexterity
Building Content Types with Dexterity
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
Django Performance Recipes
Django Performance RecipesDjango Performance Recipes
Django Performance Recipes
 
API Design & Security in django
API Design & Security in djangoAPI Design & Security in django
API Design & Security in django
 
Unbreaking Your Django Application
Unbreaking Your Django ApplicationUnbreaking Your Django Application
Unbreaking Your Django Application
 
Dexterity in the Wild
Dexterity in the WildDexterity in the Wild
Dexterity in the Wild
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Django
DjangoDjango
Django
 
django Forms in a Web API World
django Forms in a Web API Worlddjango Forms in a Web API World
django Forms in a Web API World
 

Destacado

Django tech-talk
Django tech-talkDjango tech-talk
Django tech-talkdtdannen
 
Django Overview
Django OverviewDjango Overview
Django OverviewBrian Tol
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoHannes Hapke
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 augVincent De Smet
 
Running Django on Docker: a workflow and code
Running Django on Docker: a workflow and codeRunning Django on Docker: a workflow and code
Running Django on Docker: a workflow and codeDanielle Madeley
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Djangojeff_croft
 
Deploying Django with Ansible
Deploying Django with AnsibleDeploying Django with Ansible
Deploying Django with Ansibleandrewmirskynet
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best PracticesDavid Arcos
 
Efficient Django
Efficient DjangoEfficient Django
Efficient DjangoDavid Arcos
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of DjangoJacob Kaplan-Moss
 
AWS Elastic Beanstalk and Docker
AWS Elastic Beanstalk and DockerAWS Elastic Beanstalk and Docker
AWS Elastic Beanstalk and DockerDocker, Inc.
 
An Overview of Models in Django
An Overview of Models in DjangoAn Overview of Models in Django
An Overview of Models in DjangoMichael Auritt
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
 

Destacado (20)

Why Django
Why DjangoWhy Django
Why Django
 
Django tech-talk
Django tech-talkDjango tech-talk
Django tech-talk
 
Django Overview
Django OverviewDjango Overview
Django Overview
 
Free django
Free djangoFree django
Free django
 
ORM in Django
ORM in DjangoORM in Django
ORM in Django
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize Django
 
Django via Docker
Django via DockerDjango via Docker
Django via Docker
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
 
Running Django on Docker: a workflow and code
Running Django on Docker: a workflow and codeRunning Django on Docker: a workflow and code
Running Django on Docker: a workflow and code
 
Getting Started With Django
Getting Started With DjangoGetting Started With Django
Getting Started With Django
 
Django and Docker
Django and DockerDjango and Docker
Django and Docker
 
Deploying Django with Ansible
Deploying Django with AnsibleDeploying Django with Ansible
Deploying Django with Ansible
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best Practices
 
Efficient Django
Efficient DjangoEfficient Django
Efficient Django
 
The Best (and Worst) of Django
The Best (and Worst) of DjangoThe Best (and Worst) of Django
The Best (and Worst) of Django
 
AWS Elastic Beanstalk and Docker
AWS Elastic Beanstalk and DockerAWS Elastic Beanstalk and Docker
AWS Elastic Beanstalk and Docker
 
Django Best Practices
Django Best PracticesDjango Best Practices
Django Best Practices
 
An Overview of Models in Django
An Overview of Models in DjangoAn Overview of Models in Django
An Overview of Models in Django
 
Python Presentation
Python PresentationPython Presentation
Python Presentation
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 

Similar a Jumpstart Django

GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineYared Ayalew
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGentkevinvw
 
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...Amazon Web Services
 
web2py:Web development like a boss
web2py:Web development like a bossweb2py:Web development like a boss
web2py:Web development like a bossFrancisco Ribeiro
 
The SharePoint & jQuery Guide
The SharePoint & jQuery GuideThe SharePoint & jQuery Guide
The SharePoint & jQuery GuideMark Rackley
 
The SharePoint and jQuery Guide by Mark Rackley - SPTechCon
The SharePoint and jQuery Guide by Mark Rackley - SPTechConThe SharePoint and jQuery Guide by Mark Rackley - SPTechCon
The SharePoint and jQuery Guide by Mark Rackley - SPTechConSPTechCon
 
RoR 101: Session 2
RoR 101: Session 2RoR 101: Session 2
RoR 101: Session 2Rory Gianni
 
SPSTC - SharePoint & jQuery Essentials
SPSTC - SharePoint & jQuery EssentialsSPSTC - SharePoint & jQuery Essentials
SPSTC - SharePoint & jQuery EssentialsMark Rackley
 
Pluggable patterns
Pluggable patternsPluggable patterns
Pluggable patternsCorey Oordt
 
django_introduction20141030
django_introduction20141030django_introduction20141030
django_introduction20141030Kevin Wu
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSpeedment, Inc.
 
Python - A Comprehensive Programming Language
Python - A Comprehensive Programming LanguagePython - A Comprehensive Programming Language
Python - A Comprehensive Programming LanguageTsungWei Hu
 
Scalable web application architecture
Scalable web application architectureScalable web application architecture
Scalable web application architecturepostrational
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Lucidworks
 
BackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsBackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsJoseph Khan
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsMark Rackley
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1Mohammad Qureshi
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)Doris Chen
 

Similar a Jumpstart Django (20)

GDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App EngineGDG Addis - An Introduction to Django and App Engine
GDG Addis - An Introduction to Django and App Engine
 
Django introduction @ UGent
Django introduction @ UGentDjango introduction @ UGent
Django introduction @ UGent
 
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...
(BDT402) Performance Profiling in Production: Analyzing Web Requests at Scale...
 
Tango with django
Tango with djangoTango with django
Tango with django
 
web2py:Web development like a boss
web2py:Web development like a bossweb2py:Web development like a boss
web2py:Web development like a boss
 
The SharePoint & jQuery Guide
The SharePoint & jQuery GuideThe SharePoint & jQuery Guide
The SharePoint & jQuery Guide
 
The SharePoint and jQuery Guide by Mark Rackley - SPTechCon
The SharePoint and jQuery Guide by Mark Rackley - SPTechConThe SharePoint and jQuery Guide by Mark Rackley - SPTechCon
The SharePoint and jQuery Guide by Mark Rackley - SPTechCon
 
RoR 101: Session 2
RoR 101: Session 2RoR 101: Session 2
RoR 101: Session 2
 
SPSTC - SharePoint & jQuery Essentials
SPSTC - SharePoint & jQuery EssentialsSPSTC - SharePoint & jQuery Essentials
SPSTC - SharePoint & jQuery Essentials
 
Pluggable patterns
Pluggable patternsPluggable patterns
Pluggable patterns
 
django_introduction20141030
django_introduction20141030django_introduction20141030
django_introduction20141030
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
 
Python - A Comprehensive Programming Language
Python - A Comprehensive Programming LanguagePython - A Comprehensive Programming Language
Python - A Comprehensive Programming Language
 
Scalable web application architecture
Scalable web application architectureScalable web application architecture
Scalable web application architecture
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
 
BackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applicationsBackboneJS Training - Giving Backbone to your applications
BackboneJS Training - Giving Backbone to your applications
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 

Último (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 

Jumpstart Django

  • 1. Jumpstart The Web Framework for Perfectionists with Deadlines CPOSC Rob Yates October, 2009
  • 4. Topics • What is Django • History of Django
  • 5. Topics • What is Django • History of Django • Whirlwind Tour
  • 6. Topics • What is Django • History of Django • Whirlwind Tour • How to Get Started - Admin Demo
  • 7. Topics • What is Django • History of Django • Whirlwind Tour • How to Get Started - Admin Demo • Killer Features
  • 8. Topics • What is Django • History of Django • Whirlwind Tour • How to Get Started - Admin Demo • Killer Features • Application Re-use and Pinax
  • 9. Topics • What is Django • History of Django • Whirlwind Tour • How to Get Started - Admin Demo • Killer Features • Application Re-use and Pinax • Framework Death-match
  • 11. What is Django? • Not a Gypsy Jazz Guitarist
  • 12. What is Django? • Not a Gypsy Jazz Guitarist • Web Application Development Framework written in and for Python
  • 13. What is Django? • Not a Gypsy Jazz Guitarist • Web Application Development Framework written in and for Python • Not a CMS System
  • 14. What is Django? • Not a Gypsy Jazz Guitarist • Web Application Development Framework written in and for Python • Not a CMS System • Sometimes called Python’s Ruby on Rails (RoR)
  • 15. It all started HERE Photo by Jeff Croft
  • 17.
  • 18. PyCon 2005 Major topic: Why is web development in Python so hard?
  • 20. Jump to today: Guiding Principles • Loose Coupling and tight cohesion
  • 21. Jump to today: Guiding Principles • Loose Coupling and tight cohesion • Less code
  • 22. Jump to today: Guiding Principles • Loose Coupling and tight cohesion • Less code • Quick development
  • 23. Jump to today: Guiding Principles • Loose Coupling and tight cohesion • Less code • Quick development • DRY
  • 24. Jump to today: Guiding Principles • Loose Coupling and tight cohesion • Less code • Quick development • DRY • Explicit is better than implicit
  • 25. Jump to today: Guiding Principles • Loose Coupling and tight cohesion • Less code • Quick development • DRY • Explicit is better than implicit • Consistency
  • 26. For Free!!! • Very Useful Admin CRUD • Templating - lots of useful rendering bits • Form Handling • i18n - full Unicode support • Sessions / User Auth / Role-based Perms • Object-Relational Mapping Beer photo by Lori Spindler
  • 28. Model View Controller Model View Template
  • 29. Models Templates App Views Models Templates App Views Site Models Templates App Views Settings URLs Django App Structure Templates
  • 30. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 31. Deep Dive: Models from tagging.fields import TagField class Post(models.Model): author = models.ForeignKey(Author) title = models.CharField(max_length=200) slug = models.SlugField(max_length=200, unique_for_month='pub_date') body = models.TextField() TYPE_CHOICES = ( ('rant', 'Rant'), ('tirade', 'Tirade'), ) type = models.CharField(choices=TYPE_CHOICES, max_length=50) pub_date = models.DateTimeField(auto_now_add=True) is_active = models.BooleanField(default=True) tags = TagField(blank=True, null=True) class Meta: unique_together = ('title', 'type') ordering = ['-pub_date']
  • 32. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 33. Deep Dive: DB API post = Post(title=‘Foo’, body=‘Bar’) post.type = ‘rant’ post.save()
  • 34. Deep Dive: DB API post = Post(title=‘Foo’, body=‘Bar’) post.type = ‘rant’ post.save() posts = Post.objects.all() posts = Post.objects.all()[:5] posts = Post.objects.filter(post_type=‘rant’) posts = Post.objects.filter(author__name=‘Rob’) posts = Post.objects.filter(author__name=‘Rob’). filter(title__contains=‘django’).order_by(‘type’) post = Post.objects.get(id=24)
  • 35. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 36. Deep Dive: Forms # Basic Form class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() cc_myself = forms.BooleanField(required=False)
  • 37. Deep Dive: Forms # Basic Form class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField() sender = forms.EmailField() cc_myself = forms.BooleanField(required=False) # Form based on a model class PostForm(forms.ModelForm): class Meta: model = Post
  • 38. Deep Dive: Views def posts_by_type(request, type): posts = Post.objects.filter(type=type) return render_to_response( ‘postsbytype.html’, {‘posts’: posts})
  • 39. Deep Dive: Views def posts_by_type(request, type): posts = Post.objects.filter(type=type) return render_to_response( ‘postsbytype.html’, {‘posts’: posts}) def new_post(request): if request.method == ‘POST’: form = PostForm(request.POST) if form.is_valid(): form.save() else: form = PostForm() return render_to_response( ‘mytemplate.html’, {‘form’: form})
  • 40. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 41. Deep Dive: URLs urlpatters = patterns(‘’, (’^my/favorite/color/$’, ‘blog.views.my_fav_color’), (‘^post/new/$’, ‘blog.views.new_post’), (‘^posts/(d{4})/$’, ‘blog.views.year_archive’), (‘^posts/(d{4})/(d{2})/$’, ‘blog.views.month_archive’), (‘^posts/(?P<slug>[a-z-]*)/$’, ‘blog.views.show_post’), (‘^events/$’, include(events.urls), )
  • 42. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 43. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 44. Deep Dive: Templates <html><body> {% if posts %} {% for post in posts %} {{ post.author }}: {{ post.title }} {% endfor %} {% endif %}
  • 45. Deep Dive: Templates <html><body> {% if posts %} {% for post in posts %} {{ post.author }}: {{ post.title }} {% endfor %} {% endif %} <form method=”post”> <table> {{ form }} </table> </form>
  • 46. Deep Dive: Templates <html><body> {% if posts %} {% for post in posts %} {{ post.author }}: {{ post.title }} {% endfor %} {% endif %} <form method=”post”> <ul> {{ form.as_ul }} </ul> </form>
  • 47. Architecture RDBMS Storage ORM Fixtures Model Signals Forms Template URL Resolver View Template Loader Middleware Middleware Request Response
  • 48. Getting Started • Pure Python - no compiled code • No dependencies (with the exception of the database adapter of your choice • Three-step install • D/L and extract tar • Run setup.py • Add django-admin.py to path (optional)
  • 49. Initialize Your Project $ django-admin.py startproject mysite $ cd mysite $ python manage.py startapp myapp $ edit settings.py and set DB Info $ python manage.py runserver http://localhost:8000
  • 50. Killer Features • Legacy DB • Generic Views • Test Framework • Template Inheritance • Multi-DB • Tempalte Filters • Geodjango • Humanize • Aggregation • Runs on Jython / IronPython • JSON Serializer • Stable API Promise • Google AppEngine! • Fantastic Docs
  • 51. Roll Your Own • Model Managers: Custom database API for views • Custom Template Tags: Easier to implement functionality without mixing logic/presentation
  • 52. Roll Your Own • Model Managers: Custom database API for views • Custom Template Tags: Easier to implement functionality without mixing logic/presentation • ORM Layer • Model Fields • Template Engine • Form Fields • Template Loader • URL Resolver
  • 53. Re-usable Apps and Pinax • Following best practices when creating your app allows others to plug in and use it • Search Google Code for *django* projects returns 1,987 results - many are apps • James Tauber created Django Hotclub to establish standards for app development and integration • Hotclub later become Pinax
  • 54.
  • 56. Death-match: RoR • URL Handling • RoR: RESTful with HTTP verbs • Django: RegEx-based URL patterns • JavaScript / AJAX • RoR: XHR helpers with RJS, prototype, scriptaculous • Django: JS framework agnostic / no helpers besides serialization
  • 57. Death-match: RoR • Unicode • Ruby traditionally has had issues - string is byte sequence • Python is fully Unicode since v1.6 (circa 2000) • i18n • RoR: Translations are copied - no fallback? • Django: Translations use GNU gettext-style localization - falls back to default language
  • 58. Death-match: RoR • Plugins • RoR: Rich plugin API and structure • Django: Re-usable applications • Automation / Build • RoR: rake is a rich scripting language for automated tasks • Django: manage.py can do some basic tricks - CLI
  • 59. Death-match: RoR • Jobs: Rails jobs out-number Django jobs 6:1 • Hype: Rails has done a fantastic job with marketing
  • 60. Death-match: RoR • Jobs: Rails jobs out-number Django jobs 6:1 • Hype: Rails has done a fantastic job with marketing
  • 61. Recap
  • 63. Recap • Django is easy • Django is fun
  • 64. Recap • Django is easy • Django is fun • Django scales
  • 65. Recap • Django is easy • Django is fun • Django scales • Django is maintainable
  • 66. Recap • Django is easy • Django is fun • Django scales • Django is maintainable • Django saves small kittens
  • 67. Recap • Django is easy • Django is fun • Django scales • Django is maintainable • Django saves small kittens • It rocks - USE IT!
  • 68. Resources • http://djangoproject.com • Check out the tutorial! • http://docs.djangoproject.com • http://djangodose.com • http://www.b-list.org/ • http://pinaxproject.com • http://code.google.com/hosting/search? q=label%3aDjango

Notas del editor

  1. Survey: How many do web application development; in django; in rails
  2. Lawrence, Kansas Since 1850&amp;#x2019;s Family run newspaper - currently run by someone who is 70 years old that does not use a computer - assistant prints out e-mails
  3. Adrian: Chicago Crime, Coined the term &amp;#x201C;Database Journalism&amp;#x201D; Simon: Early work is part of many JS frameworks, Consultant on OpenID Joined by Jacob Kaplan-Moss
  4. First online newspaper of it&amp;#x2019;s kind. Had a print edition of the website
  5. &amp;#x201C;The CMS&amp;#x201D;
  6. In a landscape of confusion - invent your own
  7. Re-framed the perception of web development;
  8. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  9. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  10. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  11. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  12. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  13. Various layers shouldn&amp;#x2019;t know about eachother unless absolutely necessary Code should lack boilerplate - Java Make tedious aspects fast - it&amp;#x2019;s just Python shouldn&amp;#x2019;t do much magic
  14. manage.py syncdb
  15. Those too hip for non-relational databases will have to wait. Multi-DB support is coming.
  16. Notice: more declarative programming
  17. Notice: more declarative programming
  18. You can generate these things dynamically
  19. Middleware
  20. Middleware
  21. Middleware
  22. Complete separation of logic and presentation - pain for things like Math or comparisons. Templates don&amp;#x2019;t need to be HTML - JSON, e-mail, text
  23. Complete separation of logic and presentation - pain for things like Math or comparisons. Templates don&amp;#x2019;t need to be HTML - JSON, e-mail, text
  24. Complete separation of logic and presentation - pain for things like Math or comparisons. Templates don&amp;#x2019;t need to be HTML - JSON, e-mail, text
  25. Complete separation of logic and presentation - pain for things like Math or comparisons. Templates don&amp;#x2019;t need to be HTML - JSON, e-mail, text
  26. PHP comparison doesn&amp;#x2019;t count. Really a Django Rails comparison
  27. Who is the clear winner?
  28. Curl.com
  29. Curl.com
  30. Curl.com
  31. Curl.com
  32. Curl.com
  33. Curl.com