SlideShare uma empresa Scribd logo
1 de 56
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/
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/

Mais conteúdo relacionado

Mais procurados

Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics PresentationShrinath Shenoy
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Tom Brander
 
Django Tutorial | Django Web Development With Python | Django Training and Ce...
Django Tutorial | Django Web Development With Python | Django Training and Ce...Django Tutorial | Django Web Development With Python | Django Training and Ce...
Django Tutorial | Django Web Development With Python | Django Training and Ce...Edureka!
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersRosario Renga
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
Introduction to django framework
Introduction to django frameworkIntroduction to django framework
Introduction to django frameworkKnoldus Inc.
 
Django Interview Questions and Answers
Django Interview Questions and AnswersDjango Interview Questions and Answers
Django Interview Questions and AnswersPython Devloper
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction DjangoWade Austin
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
Web application development with Django framework
Web application development with Django frameworkWeb application development with Django framework
Web application development with Django frameworkflapiello
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and DjangoMichael Pirnat
 
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...Edureka!
 

Mais procurados (20)

Web development with django - Basics Presentation
Web development with django - Basics PresentationWeb development with django - Basics Presentation
Web development with django - Basics Presentation
 
Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?
 
Django Tutorial | Django Web Development With Python | Django Training and Ce...
Django Tutorial | Django Web Development With Python | Django Training and Ce...Django Tutorial | Django Web Development With Python | Django Training and Ce...
Django Tutorial | Django Web Development With Python | Django Training and Ce...
 
Django Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python DevelopersDjango Framework Overview forNon-Python Developers
Django Framework Overview forNon-Python Developers
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Introduction to django framework
Introduction to django frameworkIntroduction to django framework
Introduction to django framework
 
Django Girls Tutorial
Django Girls TutorialDjango Girls Tutorial
Django Girls Tutorial
 
Python/Django Training
Python/Django TrainingPython/Django Training
Python/Django Training
 
Django
DjangoDjango
Django
 
Django Interview Questions and Answers
Django Interview Questions and AnswersDjango Interview Questions and Answers
Django Interview Questions and Answers
 
Introduction Django
Introduction DjangoIntroduction Django
Introduction Django
 
Django
DjangoDjango
Django
 
Django by rj
Django by rjDjango by rj
Django by rj
 
DJango
DJangoDJango
DJango
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
django
djangodjango
django
 
Web application development with Django framework
Web application development with Django frameworkWeb application development with Django framework
Web application development with Django framework
 
Web Development with Python and Django
Web Development with Python and DjangoWeb Development with Python and Django
Web Development with Python and Django
 
Django
DjangoDjango
Django
 
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
What is Django | Django Tutorial for Beginners | Python Django Training | Edu...
 

Destaque

Blog project
Blog projectBlog project
Blog projectshara831
 
Jumpstart Django
Jumpstart DjangoJumpstart Django
Jumpstart Djangoryates
 
Two scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesTwo scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesSpin Lai
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best PracticesDavid Arcos
 

Destaque (8)

Tango with django
Tango with djangoTango with django
Tango with django
 
Django In The Real World
Django In The Real WorldDjango In The Real World
Django In The Real World
 
Blog project
Blog projectBlog project
Blog project
 
Blog Project
Blog ProjectBlog Project
Blog Project
 
Jumpstart Django
Jumpstart DjangoJumpstart Django
Jumpstart Django
 
Two scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesTwo scoops of Django - Security Best Practices
Two scoops of Django - Security Best Practices
 
Django in the Real World
Django in the Real WorldDjango in the Real World
Django in the Real World
 
12 tips on Django Best Practices
12 tips on Django Best Practices12 tips on Django Best Practices
12 tips on Django Best Practices
 

Semelhante a Introduction to Django

Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJoaquim Rocha
 
Mini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesMini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesLeonardo Fernandes
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!David Gibbons
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsJames Stone
 
بررسی چارچوب جنگو
بررسی چارچوب جنگوبررسی چارچوب جنگو
بررسی چارچوب جنگوrailsbootcamp
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using DjangoSunil kumar Mohanty
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKBrendan Lim
 
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
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Djangofool2nd
 
Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksMike Hugo
 
Build and deploy Python Django project
Build and deploy Python Django projectBuild and deploy Python Django project
Build and deploy Python Django projectXiaoqi Zhao
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesTikal Knowledge
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsAlessandro Molina
 
Hands on django part 1
Hands on django part 1Hands on django part 1
Hands on django part 1MicroPyramid .
 

Semelhante a Introduction to Django (20)

Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Mini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico CesMini Curso Django Ii Congresso Academico Ces
Mini Curso Django Ii Congresso Academico Ces
 
How to Webpack your Django!
How to Webpack your Django!How to Webpack your Django!
How to Webpack your Django!
 
Mini Curso de Django
Mini Curso de DjangoMini Curso de Django
Mini Curso de Django
 
Django crush course
Django crush course Django crush course
Django crush course
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
 
بررسی چارچوب جنگو
بررسی چارچوب جنگوبررسی چارچوب جنگو
بررسی چارچوب جنگو
 
Virtual Environment and Web development using Django
Virtual Environment and Web development using DjangoVirtual Environment and Web development using Django
Virtual Environment and Web development using Django
 
Introduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDKIntroduction to Palm's Mojo SDK
Introduction to Palm's Mojo SDK
 
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
 
React django
React djangoReact django
React django
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
Gae Meets Django
Gae Meets DjangoGae Meets Django
Gae Meets Django
 
django
djangodjango
django
 
Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And Tricks
 
Build and deploy Python Django project
Build and deploy Python Django projectBuild and deploy Python Django project
Build and deploy Python Django project
 
Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)Google App Engine in 40 minutes (the absolute essentials)
Google App Engine in 40 minutes (the absolute essentials)
 
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With DeadlinesJBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
JBUG 11 - Django-The Web Framework For Perfectionists With Deadlines
 
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsEP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
EP2016 - Moving Away From Nodejs To A Pure Python Solution For Assets
 
Hands on django part 1
Hands on django part 1Hands on django part 1
Hands on django part 1
 

Mais de James Casey

Habitat on AKS - Demo
Habitat on AKS - DemoHabitat on AKS - Demo
Habitat on AKS - DemoJames Casey
 
Compliance at Velocity with Chef
Compliance at Velocity with ChefCompliance at Velocity with Chef
Compliance at Velocity with ChefJames Casey
 
Chef Analytics Webinar
Chef Analytics WebinarChef Analytics Webinar
Chef Analytics WebinarJames Casey
 
Chef Analytics (Chef NYC Meeting - July 2014)
Chef Analytics (Chef NYC Meeting - July 2014)Chef Analytics (Chef NYC Meeting - July 2014)
Chef Analytics (Chef NYC Meeting - July 2014)James Casey
 
Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!Chef Actions: Delightful near real-time activity tracking!
Chef Actions: Delightful near real-time activity tracking!James Casey
 
Chef - Configuration Management for the Cloud
Chef - Configuration Management for the CloudChef - Configuration Management for the Cloud
Chef - Configuration Management for the CloudJames Casey
 
WLCG Grid Infrastructure Monitoring
WLCG Grid Infrastructure MonitoringWLCG Grid Infrastructure Monitoring
WLCG Grid Infrastructure MonitoringJames Casey
 
1005 cern-active mq-v2
1005 cern-active mq-v21005 cern-active mq-v2
1005 cern-active mq-v2James Casey
 
Grid Information systems from an Operations Perspective
Grid Information systems from an Operations PerspectiveGrid Information systems from an Operations Perspective
Grid Information systems from an Operations PerspectiveJames Casey
 

Mais de James Casey (9)

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

Último

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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
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
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
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
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024The Digital Insurer
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Último (20)

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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
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
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

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/
  • 38.
  • 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/