Django introduction @ UGent

  • 311 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
311
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Django introduction Kevin Van Wilder www.inuits.eu
  • 2. Topics• What is Django?• Framework overview• Getting started
  • 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
  • 6. FRAMEWORK OVERVIEW
  • 7. Models ViewsTemplates Application Models ViewsTemplates Application Site/Project Project Structure Settings Urls Templates
  • 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
  • 9. Framework
  • 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 – ...
  • 13. 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)
  • 14. Templates{% extends "base_generic.html" %}{% block title %} {{ publisher.name }}{% endblock %}{% block content %} <h1>{{ publisher.name }}</h1> {% for book in object_list %} <h2> <a href="{{ book.get_absolute_url }}"> {{ book.title }} </a> </h2> {% endfor %}{% endblock %}
  • 15. Models• Abstract representation of data• Database independent• Object oriented (methods, inheritance, etc)
  • 16. 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()
  • 17. Querying the ORMBook.objects.get(title=“On the Origin of Species”)SELECT *FROM booksWHERE title = “On the Origin of species”;
  • 18. Querying the ORMBooks.objects .filter(genre=“drama”) .order_by(“-publish_date”) .annotate(author_count=Count(‘author’)) .only(“title”, “publish_date”, “genre”)
  • 19. GETTING STARTED
  • 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
  • 22. 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
  • 23. 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
  • 24. DEMO TIME!