Django at the Disco
An introduction to the Django Web framework and how it's
used by the Discovery Creative team


Rich Le...
What is           ?
• Python Web framework
• Originally developed for The World Company
• Named after jazz guitarist Djang...
Who’s using it?
• NASA
• PBS
• Discovery
• National Geographic
• The New York Times
• Broadway
• WNYC
• Google
• LA Times
...
Example project structure
myproject
   __init__.py
   manage.py
   settings.py
   urls.py
   myapp
      __init__.py
     ...
Key Features

• Object-relational mapper
• Automatic admin interface
• Elegant, Regex-based URL design
• Template language...
Object-relational mapper
from django.db import models

class Network(models.Model):
    """
    Represents a member of our...
Automatic admin interface
class NetworkAdmin(admin.ModelAdmin):
    list_display = ('name', 'admin_logo', 'link', 'visible...
Elegant, RegEx-based URL design
from django.conf.urls.defaults import *

urlpatterns = patterns('',
    (r'^admin/doc/', i...
URL structure breakdown
(r'^admin/doc/', include('django.contrib.admindocs.urls')),

 RegEx pattern            include of ...
Template system
{% extends "base.html" %}
{% load i18n %}

{% block title %}Bookmarks: {% endblock %}
{% block bodyclass %...
Template system
{% extends "base.html" %}
{% load i18n %}

{% block title %}Bookmarks: {% endblock %}
{% block bodyclass %...
Cache system

Site-wide cache
MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.midd...
Cache system

Template fragment caching
{% load cache %}
{% cache 500 sidebar %}
    .. sidebar ..
{% endcache %}


Low-le...
Internationalization

i18n in templates
{% trans "Bookmarks" %}
{% blocktrans %}This object is called {{ obj.name }}{% end...
Contrib Apps

• Authentication
• Admin
• Cache
• Comments
• CSRF
• Email
• i18n
• Jython support
• Serialization
• Syndica...
Community

• Core devs actively involved
• Thousands of community-contributed apps
• IRC: #django and #django-dev
• Mailin...
Discovery Creative

• In-house ad agency for Discovery and family of networks
• Established 1996
• 100 strong: design, dev...
How we’re using Django

• Rapid application development
• Combination of B2B, B2C, in-house apps (directory)
• Working wit...
Learn more

• docs.djangoproject.com
• djangobook.com
• djangosnippets.org
• Practical Django Projects
• Djangocon: Sept 8...
Thank you!

Rich Leland
Discovery Creative

@richleland
richard_leland@discovery.com
http://creative.discovery.com
Django at the Disco
Django at the Disco
Django at the Disco
Django at the Disco
Django at the Disco
Django at the Disco
Upcoming SlideShare
Loading in...5
×

Django at the Disco

2,734

Published on

An introduction to the Django Web framework and how it's used by the Discovery Creative team.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,734
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Django at the Disco

  1. 1. Django at the Disco An introduction to the Django Web framework and how it's used by the Discovery Creative team Rich Leland Discovery Creative @richleland richard_leland@discovery.com http://creative.discovery.com
  2. 2. What is ? • Python Web framework • Originally developed for The World Company • Named after jazz guitarist Django Reinhardt • Released under BSD license in 2005
  3. 3. Who’s using it? • NASA • PBS • Discovery • National Geographic • The New York Times • Broadway • WNYC • Google • LA Times • LexisNexis
  4. 4. Example project structure myproject __init__.py manage.py settings.py urls.py myapp __init__.py admin.py models.py urls.py views.py static templates myproject
  5. 5. Key Features • Object-relational mapper • Automatic admin interface • Elegant, Regex-based URL design • Template language • Cache system • Internationalization • Community
  6. 6. Object-relational mapper from django.db import models class Network(models.Model): """ Represents a member of our family of Networks. """ visible = models.BooleanField(default=True) name = models.CharField(max_length=100) slug = models.SlugField(unique=True) large_logo = models.ImageField(upload_to='ugc/logos/lg/', blank=True) small_logo = models.ImageField(upload_to='ugc/logos/sm/', blank=True) link = models.URLField(verify_exists=False, blank=True) ... # in another file, e.g. views.py: from myapp.models import Network Network.objects.all() Network.objects.get(pk=5) Network.objects.filter(slug=”some-network”)
  7. 7. Automatic admin interface class NetworkAdmin(admin.ModelAdmin): list_display = ('name', 'admin_logo', 'link', 'visible') list_filter = ('visible',) search_fields = ('name',) prepopulated_fields = { 'slug': ('name',) } admin.site.register(Network, NetworkAdmin)
  8. 8. Elegant, RegEx-based URL design from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^admin/doc/', include('django.contrib.admindocs.urls')), (r'^admin/(.*)', admin.site.root), # included url confs from other apps (r'^account/', include('registration.urls')), (r'^bookmarks/', include('bookmarks.urls')), (r'^messages/', include('mailer.urls')), # named url patterns pointing to a view url(r'^downloads/add/(?P<content_type_id>[d]+)/(?P<object_id>[d]+)/$', 'pressweb.media.views.add_download', name='add-download'), url(r'^$', 'pressweb.network.views.region_list', name='select-region-list'), )
  9. 9. URL structure breakdown (r'^admin/doc/', include('django.contrib.admindocs.urls')), RegEx pattern include of another urls.py url(r'^networks/(?P<object_id>[d]+)/$', RegEx pattern view='myapp.views.network_detail', views.py name='add-download'), pattern name
  10. 10. Template system {% extends "base.html" %} {% load i18n %} {% block title %}Bookmarks: {% endblock %} {% block bodyclass %}bookmarks wide{% endblock %} {% block bodyid %}{{ network.slug }}{% endblock %} {% block content %} {% if bookmarks %} <div class="list-view"> {% for bookmark in bookmarks %} <div class="item {% cycle 'odd' 'even' %}"> <div class="column1">{{ bookmark.created|date:"F j, Y" }}</div> <div class="column2">{{ bookmark.title }}</div> <div class="column3"><a href="{{ bookmark.url }}">Go to Page</a></ div> </div> {% endfor %} </div> {% endif %} {% endblock %}
  11. 11. Template system {% extends "base.html" %} {% load i18n %} {% block title %}Bookmarks: {% endblock %} {% block bodyclass %}bookmarks wide{% endblock %} {% block bodyid %}{{ network.slug }}{% endblock %} {% block content %} {% if bookmarks %} <div class="list-view"> {% for bookmark in bookmarks %} <div class="item {% cycle 'odd' 'even' %}"> <div class="column1">{{ bookmark.created|date:"F j, Y" }}</div> <div class="column2">{{ bookmark.title }}</div> <div class="column3"><a href="{{ bookmark.url }}">Go to Page</a></ div> </div> {% endfor %} </div> {% endif %} {% endblock %}
  12. 12. Cache system Site-wide cache MIDDLEWARE_CLASSES = ( 'django.middleware.cache.UpdateCacheMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.cache.FetchFromCacheMiddleware', ) Per-view cache @cache_page(60 * 15) def my_view(request): ...
  13. 13. Cache system Template fragment caching {% load cache %} {% cache 500 sidebar %} .. sidebar .. {% endcache %} Low-level cache API from django.core.cache import cache cache.set('my_key', 'hello, world!', 30) cache.get('my_key')
  14. 14. Internationalization i18n in templates {% trans "Bookmarks" %} {% blocktrans %}This object is called {{ obj.name }}{% endblocktrans %} i18n in modules from django.utils.translation import ugettext_lazy as _ class MyThing(models.Model): name = models.CharField(_('name'), help_text=_('This is the help text')) Create message files (.po), compile them (.mo) django-admin.py makemessages -l pt_BR django-admin.py compilemessages
  15. 15. Contrib Apps • Authentication • Admin • Cache • Comments • CSRF • Email • i18n • Jython support • Serialization • Syndication • GIS (GeoDjango)
  16. 16. Community • Core devs actively involved • Thousands of community-contributed apps • IRC: #django and #django-dev • Mailing lists: django-users and django-developers • Twitter: @djangotracker
  17. 17. Discovery Creative • In-house ad agency for Discovery and family of networks • Established 1996 • 100 strong: design, dev, photo, copy, account services, motion, prepress, production • Web team established 2006 • 2 Django devs • 4 Designers/front-end devs • 2 Project managers • 1 QA manager • Located in Silver Spring & London • Service all networks and business units globally
  18. 18. How we’re using Django • Rapid application development • Combination of B2B, B2C, in-house apps (directory) • Working with partners (Siemens, AFI/Silverdocs) • Saving the company money: 2007: $900k, 2008: $1.5M
  19. 19. Learn more • docs.djangoproject.com • djangobook.com • djangosnippets.org • Practical Django Projects • Djangocon: Sept 8-12 in Portland • django-district.org
  20. 20. Thank you! Rich Leland Discovery Creative @richleland richard_leland@discovery.com http://creative.discovery.com

×