3. Who uses Django?
• Pinterest • New York Times
• Instagram • Washington Post
• Openstack • The Guardian
• Disqus • Mercedes Benz
• Firefox • National Geographic
• NASA • Discovery Channel
• Bitbucket • Orange
• The Onion • ...
4. What is Django?
• Not a CMS!
• Web application framework to create
complex, dynamic and datadriven websites
with emphasis on:
– Loose coupling and tight cohesion
– Less code
– Quick development
– DRY
– Consistent
5. Features
• Admin interface (CRUD)
• Templating
• Form handling
• Internationalisation (i18n)
• Sessions, User management, role-based
permissions.
• Object-Relational Mapping (ORM)
• Testing Framework
• Fantastic documentation
8. Model, View, Template
• Model
– Abstracts data by defining classes for them and
stores them in relational tables
• View
– Takes a browser request and generates what the
user gets to see
• Template
– Defines how the user will see the view
10. URLConf
• URLs are matched via patterns and mapped
View functions/classes that create the output.
urlpatterns = patterns('',
url(r'^$',
TipListView.as_view(),
name='tip-list'),
url(r'^tips/(?P<slug>[-w]+)/$',
TipDetailView.as_view(),
name='tip-detail'),
)
11. Views
• Receives a request and generates a response
• Interacts with:
– Models
– Templates
– Caching
• Mostly fits inside one of the following categories:
– Show a list of objects
– Show details of an object
– Create/Update/Delete an object
– Show objects by year, month, week, day...
12. Views (continued)
• Just rendering text:
– TemplateView
• If that doesn’t float your boat: Mixins
– SingleObjectMixin
– FormMixin
– ModelFormMixin
– ...
20. Working on “Onderwijstips”
# SETTING UP ENVIRONMENT
$ mkvirtualenv onderwijstips
# CHECKING OUT THE CODE
$ git clone git@github.ugent.be:Portaal/site-onderwijstips.git
$ cd site-onderwijstips
$ git checkout develop
# BUILDING
$ ln –s buildout_dev.cfg buildout.cfg
$ python bootstrap.py
$ bin/buildout –vv # uses private github projects, requires permissions
# STARTING DJANGO
$ bin/django migrate
$ bin/django runserver
21. Git Repository
• Git Flow (http://nvie.com/posts/a-successful-git-branching-model/)
– master
• Always tagged with a version
• To be deployed
– develop
• Next version currently in development
– release/1.x.x
• A release being prepared
• Merges into master with tag 1.x.x
23. How are we deploying?
• Configuration:
– Apache2 + mod_wsgi
– MySQL
– Optimize only when necessary
(varnish, memcache, ...)
• Jenkins pipeline
– Perform a buildout
– Generate .deb file
– Upload to Infrastructure Package Repository
– Triggers a Puppet run
24. Onderwijstips
• Three applications
– Tips (front-end for users)
– Editors (back-end for tip author)
– Migration (plomino importer)
• Features:
– Haystack search indexing (django-haystack)
– User authentication (django-cas)
– MediaMosa Integration (django-mediamosa)
– Tagging (django-taggit)
– Ugent Theming (django-ugent)
• Buildout (Thx Bert!)
• Monitoring via Sentry
• Database schema migration management via South