Django
The Web Framework for Perfectionists with Deadlines

                 By: Udi h Bauman, BeeTV
This guy is happy
      with his vehicle




http://www.flickr.com/photos/24859010@N05/2350218142/
If only he knew of
  the alternatives




   http://www.flickr.com/photos/26418031@N04/2485301661/
consider your last software project
without alternatives as reference, you can’t estimate:




                   Effort
 ...
so, just consider the Time it took
to get to a Happy Customer




                    Time
& also the time it took to develop version 2,
with different requirements & scale:




                                Time
Introducing
A Web Framework that shortens the Time
it takes to develop software in at least an

        Order of Magnitude
while also tremendously minimizing:
               Effort
                Pain
            Time waste
            Complexi...
How can Django do it?

• Django automates the stuff repeating in
  every software project
• & let’s you only work on what ...
Metaphor


• Suppose you were a constructing company
• You get a customer request & spend a few
  months building what he ...
Metaphor
• Although every building is different, there
  are things repeating themselves every time
  • Ground works
  • E...
Metaphor
• Suppose some infra company came & said:
 • Just define to us what the customer need
 • Within few hours we’ll bu...
Metaphor

• You’ll probably laugh at them & say:
 • It’s probably pre-built/pre-assembled stuff
 • That limits what I can ...
Metaphor
•   What if the company will answer
    •   It’s not pre-built - we build it by your
        definition
    •   It...
Metaphor



• What can you say to that?
Demo

• Let’s develop an Issue Tracking system
 • Issues data model
 • Users management (permissions, groups)
 • Rich Web ...
Demo


• & let’s try to do it in 20 minutes
Start timer
Try it out


• http://jbug-issues.appspot.com
Django was born here
Meaning: Deadlines

• Example: highest paid gov. officials analytics
  site
  • Requested at saturday night (22:00)
  • Ske...
By a group of
                perfectionists


                     Adrian Holovaty
Jacob Kaplan-Moss                     ...
Using the language
named after these guys
Language of choice in


• The organizations attracting the best
  programmers in the world
  • Such as:
More than a scripting language

• Pure OOP
• Native threading
• Functional features
• Runs some of the largest Web sites
 ...
Why do I love Python?
 • Succinct yet very readable syntax
 • Very fast code-run-test cycle (no build)
 • Great introspect...
Programming Languages
    Evolution Tree
• Regarding “Evolutionary dead end” of Java
 • If you’ll check out history, the l...
Optimized for Perfect
    OOP Design
• Inheritance (Data Model, Templates &c)
• Enforced MVC
• Reusable APPS
• DRY
Reusable Apps?

• Your modules are very loose coupled, &
  can be used in other projects
• You can plug into your project ...
Some reusable apps
django-ratings         django-ajax-validation   django-google-analytics    django-mailer

django-queue-...
Example: Pinax
• A project containing many reusable apps
  you can immediately use to start with a
  full-featured web sit...
Django features

• Django has a lot of built-in stuff, to boost
  productivity
  • Nevertheless, it strives to remain as s...
ORM

                  title, year = row[0], row[1]
1.                query = Show.objects.filter(title=title)
2.         ...
MVC
Automatic Admin UI
Generic Views

    
1. def list_people(request):
2.     return object_list(request, Person.all(), paginate_by=10)
3.  
4. ...
Auth & user mgmt
Forms
   class FileForm(forms.ModelForm):
1.     name = forms.CharField(required=False, label='Name')
2.  
3.     def clea...
URL config

   from django.conf.urls.defaults import *
1.  
2. urlpatterns = patterns('',
3.     (r'^articles/(d{4})/$', 'm...
Templates
   {% extends 'base.html' %}
1. {% block title %}Person listing{% endblock %}
2.  
3. {% block content %}
4. <h1...
I18n
Geo

1. class District(models.Model):
2.     name = models.CharField(max_length=35)
3.     num  = models.IntegerField()
4....
More built-in stuff
• Feeds
• Comments
• Flat pages
• Middleware
• Caching
• Signals
Django powered sites
• Many newspapers (LA Times, Washington
  Post, NY Times projects, Guardian API)
  • A django based s...
Scalability
• Django runs on regular web servers, such
  as Apache, Lighty or Ngynx, using a built-in
  Python or WSGI ada...
Google AppEngine


• Based on Django
• Django apps can be easily deployed
IT acceptance
• IT environments today are mostly familiar
  with Java
• Solution: use Jython that compiles Python
  to byt...
Implications

• On Outsourcing (no need for many out-
  sourced/off-shore programmers)
• On Build-vs-Buy (why buy when you...
Why not Rails?
•   Rails is also great, great people love it

•   However, I've got several things in which I think
    Ra...
Wanna start?

• Django Book (free, online, amazing)
• Dive into Python (free, online, amazing)
• Django Tutorial
IDE’s & Build tools
• I use Eclipse, using the PyDev plugin
 • NetBeans & IntelliJ also have Python
    support
  • Other ...
Links

• Django Sites
• Django People
• Django Project
• “Why I hate Django” keynote from
  DjangoCon
Q&A
Upcoming SlideShare
Loading in...5
×

Intro To Django

5,286

Published on

A talk given at the Israeli JBoss User Group meeting (JBug-11), May-25-2009.

Published in: Technology, Design

Intro To Django

  1. 1. Django The Web Framework for Perfectionists with Deadlines By: Udi h Bauman, BeeTV
  2. 2. This guy is happy with his vehicle http://www.flickr.com/photos/24859010@N05/2350218142/
  3. 3. If only he knew of the alternatives http://www.flickr.com/photos/26418031@N04/2485301661/
  4. 4. consider your last software project without alternatives as reference, you can’t estimate: Effort Pain Time waste Complexity Cost of change
  5. 5. so, just consider the Time it took to get to a Happy Customer Time
  6. 6. & also the time it took to develop version 2, with different requirements & scale: Time
  7. 7. Introducing
  8. 8. A Web Framework that shortens the Time it takes to develop software in at least an Order of Magnitude
  9. 9. while also tremendously minimizing: Effort Pain Time waste Complexity Cost of change & more
  10. 10. How can Django do it? • Django automates the stuff repeating in every software project • & let’s you only work on what differentiates them
  11. 11. Metaphor • Suppose you were a constructing company • You get a customer request & spend a few months building what he wants
  12. 12. Metaphor • Although every building is different, there are things repeating themselves every time • Ground works • Electricity • Water • Skeleton • &c
  13. 13. Metaphor • Suppose some infra company came & said: • Just define to us what the customer need • Within few hours we’ll build the basic building • & in another day or so, we’ll help you complete it by answering all of the customer specific needs • So, you can deliver the building in <3 days
  14. 14. Metaphor • You’ll probably laugh at them & say: • It’s probably pre-built/pre-assembled stuff • That limits what I can do • With low quality & scalability • & I’ll also need to pay you a lot
  15. 15. Metaphor • What if the company will answer • It’s not pre-built - we build it by your definition • It doesn’t limit you to do anything, on the contrary it helps you do whatever you want • It has better quality & scalability than what you can build • It costs you nothing
  16. 16. Metaphor • What can you say to that?
  17. 17. Demo • Let’s develop an Issue Tracking system • Issues data model • Users management (permissions, groups) • Rich Web UI (search, filters, last actions) • Scalable deployment (any # of users)
  18. 18. Demo • & let’s try to do it in 20 minutes
  19. 19. Start timer
  20. 20. Try it out • http://jbug-issues.appspot.com
  21. 21. Django was born here
  22. 22. Meaning: Deadlines • Example: highest paid gov. officials analytics site • Requested at saturday night (22:00) • Skeleton ready & data entry start (23:00) • Site complete & in production (24:00)
  23. 23. By a group of perfectionists Adrian Holovaty Jacob Kaplan-Moss Simon Willison @adrianholovaty @jacobian @simonw
  24. 24. Using the language named after these guys
  25. 25. Language of choice in • The organizations attracting the best programmers in the world • Such as:
  26. 26. More than a scripting language • Pure OOP • Native threading • Functional features • Runs some of the largest Web sites • Such as:
  27. 27. Why do I love Python? • Succinct yet very readable syntax • Very fast code-run-test cycle (no build) • Great introspection (saves tons of time) • Built-in data structures (Map, Immutable List) • Syntax sugar features (list mapping, &c)
  28. 28. Programming Languages Evolution Tree • Regarding “Evolutionary dead end” of Java • If you’ll check out history, the languages that are designed by a company or committee, such as Java & Cobol, are usually the evolutionary dead-ends • See also Paul Graham’s famous article: http://www.paulgraham.com/ javacover.html
  29. 29. Optimized for Perfect OOP Design • Inheritance (Data Model, Templates &c) • Enforced MVC • Reusable APPS • DRY
  30. 30. Reusable Apps? • Your modules are very loose coupled, & can be used in other projects • You can plug into your project many 3rd party reusable apps, immediately adding to your product complex functionality • No need for coding
  31. 31. Some reusable apps django-ratings django-ajax-validation django-google-analytics django-mailer django-queue-service django-announcements django-email-confirmation django-jits django-liveblogging django-atompub django-discussion django-galaxy django-messages django-audioplayer django-db-log django-evolution django-authopenid django-googlemap django-compress django-dynamic-media- serve django-avatar django-graphs django-oembed django-clevercss django-basic-blog django-microformats django-object-view-tracking django-chunks django-basic-library django-tagging django-navbar django-ads django-basic-people django-survey django-orm-cache django-rest-interface django-basic-places django-voting django-page-cms django-registration django-cron django-wiki django-photologue django-mobileadmin django-favorites satchmo django-pingback django-openid django-forum sorl-thumbnail django-pressroom django-oauth django-gcal django-mailfriend django-mmo django-recommender
  32. 32. Example: Pinax • A project containing many reusable apps you can immediately use to start with a full-featured web site, without a line of code • Using it you can get a full-pledged Web2.0 social networking site, as basis for your web site (Example” http://cloud27.com) • 1st version developed over a weekend
  33. 33. Django features • Django has a lot of built-in stuff, to boost productivity • Nevertheless, it strives to remain as small as possible, to support any extension & not limit what you can do
  34. 34. ORM         title, year = row[0], row[1] 1.        query = Show.objects.filter(title=title) 2.        if query.count() > 0: 3.            show = query[0] 4.        else: # if not found, create one 5.            show = Show() 6.            show.title = title.encode('utf-8') 7.            show.prod_year = year 8.            show.save()
  35. 35. MVC
  36. 36. Automatic Admin UI
  37. 37. Generic Views   1. def list_people(request): 2.     return object_list(request, Person.all(), paginate_by=10) 3.   4. def show_person(request, key): 5.     return object_detail(request, Person.all(), key) 6.   7. def add_person(request): 8.     return create_object(request, form_class=PersonForm, 9.         post_save_redirect=reverse('myapp.views.show_person', 10.                                   kwargs=dict(key='%(key)s'))) 11. 
  38. 38. Auth & user mgmt
  39. 39. Forms class FileForm(forms.ModelForm): 1.     name = forms.CharField(required=False, label='Name') 2.   3.     def clean(self): 4.         file = self.cleaned_data.get('file') 5.         if not self.cleaned_data.get('name'): 6.             if isinstance(file, UploadedFile): 7.                 self.cleaned_data['name'] = file.name 8.             else: 9.                 del self.cleaned_data['name'] 10.        return self.cleaned_data 11.  12.    class Meta: 13.        model = File
  40. 40. URL config from django.conf.urls.defaults import * 1.   2. urlpatterns = patterns('', 3.     (r'^articles/(d{4})/$', 'mysite.news.views.year_archive'), 4.     (r'^articles/(d{4})/(d{2})/$', 'mysite.news.views.month_archive'), 5.     (r'^articles/(d{4})/(d{2})/(d+)/$', 'mysite.news.views.article_detail'), 6.     (r'^comments/',      include('django.contrib.comments.urls')), 7. )
  41. 41. Templates {% extends 'base.html' %} 1. {% block title %}Person listing{% endblock %} 2.   3. {% block content %} 4. <h1>Person listing</h1> 5. <a href=quot;{% url myapp.views.add_person %}quot;>Create person</a> 6.   7. <ul> 8.   {% for person in object_list %} 9.     <li> 10.      <a href=quot;{% url myapp.views.show_person key=person.key %}quot;>{{ person.first_name }} {{ person.last_name }}</a> 11.      <a href=quot;{% url myapp.views.edit_person key=person.key %}quot;>Edit</a> 12.      <a href=quot;{% url myapp.views.delete_person key=person.key %}quot;>Delete</a> 13.    </li> 14.  {% endfor %}
  42. 42. I18n
  43. 43. Geo 1. class District(models.Model): 2.     name = models.CharField(max_length=35) 3.     num  = models.IntegerField() 4.     poly = models.PolygonField() 5.   6.     objects = models.GeoManager() 7.   8. class School(models.Model): 9.     name  = models.CharField(max_length=35) 10.    point = models.PointField() 11.  12.    objects = models.GeoManager()
  44. 44. More built-in stuff • Feeds • Comments • Flat pages • Middleware • Caching • Signals
  45. 45. Django powered sites • Many newspapers (LA Times, Washington Post, NY Times projects, Guardian API) • A django based site even won a Politzer! • BitBucket (mercurial OSS repository) • Pounce, Fluther, SuggestionBox, Tabblo, Revver (popular Web2.0 services) • Curse (very high-traffic gaming site)
  46. 46. Scalability • Django runs on regular web servers, such as Apache, Lighty or Ngynx, using a built-in Python or WSGI adapter • This makes it very lightweight & scalable, as any LAMP deployment • There are examples of sites that handle MM reqs/hour, using less than 10 servers
  47. 47. Google AppEngine • Based on Django • Django apps can be easily deployed
  48. 48. IT acceptance • IT environments today are mostly familiar with Java • Solution: use Jython that compiles Python to bytecode • Package a Django project as .war • Sun constantly improves Jython & maintains compatibility /w Django
  49. 49. Implications • On Outsourcing (no need for many out- sourced/off-shore programmers) • On Build-vs-Buy (why buy when you can build any information system in an hour?)
  50. 50. Why not Rails? • Rails is also great, great people love it • However, I've got several things in which I think Rails is inferior, which people should consider • Performance & scalability • Emphasis on good design (no Magic in Django) • Maturity • Underlying language
  51. 51. Wanna start? • Django Book (free, online, amazing) • Dive into Python (free, online, amazing) • Django Tutorial
  52. 52. IDE’s & Build tools • I use Eclipse, using the PyDev plugin • NetBeans & IntelliJ also have Python support • Other commercial Python IDE’s are also excellent: Wingware, Komodo • No need for build tools, it’s Python...
  53. 53. Links • Django Sites • Django People • Django Project • “Why I hate Django” keynote from DjangoCon
  54. 54. Q&A
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×