Django introduction @ UGent
Upcoming SlideShare
Loading in...5

Django introduction @ UGent






Total Views
Views on SlideShare
Embed Views



1 Embed 26 26



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Django introduction @ UGent Django introduction @ UGent Presentation Transcript

  • Django introduction Kevin Van Wilder
  • Topics• What is Django?• Framework overview• Getting started
  • 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 • ...
  • 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
  • Features• Admin interface (CRUD)• Templating• Form handling• Internationalisation (i18n)• Sessions, User management, role-based permissions.• Object-Relational Mapping (ORM)• Testing Framework• Fantastic documentation
  • Models ViewsTemplates Application Models ViewsTemplates Application Site/Project Project Structure Settings Urls Templates
  • 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
  • Framework
  • 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), )
  • 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...
  • Views (continued)• Just rendering text: – TemplateView• If that doesn’t float your boat: Mixins – SingleObjectMixin – FormMixin – ModelFormMixin – ...
  • Overviewurlpatterns = patterns(, url(r^books/([w-]+)/$, PublisherBookList.as_view(), name=author-detail),)class PublisherBookList(ListView): template_name = books/books_by_publisher.html def get_queryset(self): self.publisher = get_object_or_404(Publisher, name=self.args[0]) return Book.objects.filter(publisher=self.publisher)
  • Templates{% extends "base_generic.html" %}{% block title %} {{ }}{% endblock %}{% block content %} <h1>{{ }}</h1> {% for book in object_list %} <h2> <a href="{{ book.get_absolute_url }}"> {{ book.title }} </a> </h2> {% endfor %}{% endblock %}
  • Models• Abstract representation of data• Database independent• Object oriented (methods, inheritance, etc)
  • from django.db import modelsclass Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() class Meta: ordering = ["-name"] def __unicode__(self): return self.nameclass Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField()
  • Querying the ORMBook.objects.get(title=“On the Origin of Species”)SELECT *FROM booksWHERE title = “On the Origin of species”;
  • Querying the ORMBooks.objects .filter(genre=“drama”) .order_by(“-publish_date”) .annotate(author_count=Count(‘author’)) .only(“title”, “publish_date”, “genre”)
  • Working on “Onderwijstips”# SETTING UP ENVIRONMENT$ mkvirtualenv onderwijstips# CHECKING OUT THE CODE$ git clone$ cd site-onderwijstips$ git checkout develop# BUILDING$ ln –s buildout_dev.cfg buildout.cfg$ python$ bin/buildout –vv # uses private github projects, requires permissions# STARTING DJANGO$ bin/django migrate$ bin/django runserver
  • Git Repository• Git Flow ( – 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
  • 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
  • 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