Slide 1

Slide 1 text

Django 1.5 Erste Schritte und neue Features Markus Zapke-Gründemann LinuxTag 2013

Slide 2

Slide 2 text

Übersicht 1. Vorstellung 2. Was ist Django? 3. Architektur 4. Komponenten 5. Code 6. Django in freier Wildbahn 7. Gute Gründe für Django 8. Django 1.5

Slide 3

Slide 3 text

Markus Zapke-Gründemann • Softwareentwickler seit 2001 • Softwareentwicklung mit Python, Django und Mercurial • Selbstständig seit 2008 • Seit 2011 Geschäftsführer bei Inqbus

Slide 4

Slide 4 text

Was ist Django?

Slide 5

Slide 5 text

Bildquelle: http://en.wikipedia.org/wiki/File:Django_Reinhardt_%28Gottlieb_07301%29.jpg Django Reinhardt * 23.1.1910 ✝ 16.5.1953

Slide 6

Slide 6 text

Allgemeines • Web Application Framework • In Python geschrieben • Open Source Software (BSD Lizenz) • Django Software Foundation • Umfangreiche Dokumentation • Große, freundliche Community

Slide 7

Slide 7 text

Philosophie • Rapid Development • Loose Coupling • Wiederverwendbare Applikationen • Don't Repeat Yourself (DRY) Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. http://c2.com/cgi/wiki?DontRepeatYourself

Slide 8

Slide 8 text

djangoproject.com

Slide 9

Slide 9 text

Architektur

Slide 10

Slide 10 text

MTV

Slide 11

Slide 11 text

Model Daten (Object Relational Mapper) Template Präsentation (HTML) View Business Logic (Response)

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Webserver

Slide 14

Slide 14 text

Webserver URLConf

Slide 15

Slide 15 text

View Webserver URLConf

Slide 16

Slide 16 text

View Webserver URLConf Middleware

Slide 17

Slide 17 text

View Webserver URLConf Middleware process_request

Slide 18

Slide 18 text

View Webserver URLConf Middleware process_request process_view

Slide 19

Slide 19 text

View Webserver URLConf Middleware process_request process_view

Slide 20

Slide 20 text

View Webserver Model (ORM) URLConf Middleware process_request process_view

Slide 21

Slide 21 text

View Webserver Model (ORM) URLConf Middleware process_request process_view

Slide 22

Slide 22 text

View Webserver Datenbank Model (ORM) URLConf Middleware process_request process_view

Slide 23

Slide 23 text

View Webserver Datenbank Model (ORM) URLConf Middleware process_request process_view

Slide 24

Slide 24 text

View Webserver Datenbank Model (ORM) URLConf Middleware process_request process_view

Slide 25

Slide 25 text

View Webserver Datenbank Model (ORM) URLConf Middleware process_request process_view

Slide 26

Slide 26 text

View Webserver Datenbank Template Model (ORM) URLConf Middleware process_request process_view

Slide 27

Slide 27 text

View Webserver Datenbank Template Model (ORM) URLConf Middleware process_request process_view

Slide 28

Slide 28 text

View Webserver Datenbank Template Model (ORM) URLConf Tags & Filter Middleware process_request process_view

Slide 29

Slide 29 text

View Webserver Datenbank Template Model (ORM) URLConf Tags & Filter Middleware process_request process_view

Slide 30

Slide 30 text

View Webserver Datenbank Template Model (ORM) URLConf Tags & Filter Middleware process_request process_template_response process_response process_view

Slide 31

Slide 31 text

Komponenten

Slide 32

Slide 32 text

Komponenten

Slide 33

Slide 33 text

Sessions Komponenten

Slide 34

Slide 34 text

Sessions Authentifizierung Komponenten

Slide 35

Slide 35 text

Sessions Authentifizierung Formulare Komponenten

Slide 36

Slide 36 text

Sessions Authentifizierung Formulare Validierung Komponenten

Slide 37

Slide 37 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Komponenten

Slide 38

Slide 38 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Komponenten

Slide 39

Slide 39 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Komponenten

Slide 40

Slide 40 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Komponenten

Slide 41

Slide 41 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Komponenten

Slide 42

Slide 42 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Caching Komponenten

Slide 43

Slide 43 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Caching Security Komponenten

Slide 44

Slide 44 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Caching Security File Storage Komponenten

Slide 45

Slide 45 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Caching Security File Storage GeoDjango (GIS) Komponenten

Slide 46

Slide 46 text

Sessions Authentifizierung Formulare Validierung Serializer (JSON, XML, YAML) Syndication (RSS, Atom) Internationalisierung Lokalisierung Testing Caching Security File Storage GeoDjango (GIS) interaktive Shell Komponenten

Slide 47

Slide 47 text

Admin

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

Eingebauter Entwicklungsserver $ python manage.py runserver Validating models... 0 errors found March 02, 2013 - 15:58:34 Django version 1.5, using settings 'mysite.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [02/Mar/2013 15:58:45] "GET /admin/ HTTP/1.1" 200 7256 [02/Mar/2013 15:58:47] "GET /admin/sites/site/ HTTP/1.1" 200 4874 [02/Mar/2013 15:58:47] "GET /admin/jsi18n/ HTTP/1.1" 200 5467 [02/Mar/2013 15:58:49] "GET /admin/ HTTP/1.1" 200 7256 [02/Mar/2013 15:58:51] "GET /admin/auth/user/ HTTP/1.1" 200 6162 [02/Mar/2013 15:58:51] "GET /admin/jsi18n/ HTTP/1.1" 200 5467

Slide 53

Slide 53 text

Code

Slide 54

Slide 54 text

View Webserver Template Model (ORM) URLConf

Slide 55

Slide 55 text

views.py Webserver templates/*.html models.py urls.py

Slide 56

Slide 56 text

from django.contrib.auth.models import User from django.db import models class Bookmark(models.Model): url = models.URLField() title = models.CharField(u'title', max_length=255) description = models.TextField(u'description', blank=True) is_public = models.BooleanField(u'public', default=True) owner = models.ForeignKey(User, verbose_name=u'owner') class Meta: verbose_name = u'bookmark' verbose_name_plural = u'bookmarks' def __unicode__(self): return u'%s (%s)' % (self.title, self.url) marcador/models.py

Slide 57

Slide 57 text

from django.conf.urls import patterns, include, url urlpatterns = patterns('marcador.views', url(r'^$', 'bookmark_list', name='marcador_bookmark_list'), ) marcador/urls.py

Slide 58

Slide 58 text

from django.shortcuts import render from .models import Bookmark def bookmark_list(request): bookmarks = Bookmark.public.all() context = {'bookmarks': bookmarks} return render(request, 'marcador/bookmark_list.html', context) marcador/views.py

Slide 59

Slide 59 text

{% extends "base.html" %} {% block content %}

Latest bookmarks

    {% for bookmark in bookmarks %}
  • {% include "marcador/bookmark.html" %}
  • {% empty %}
  • No bookmarks. :(
  • {% endfor %}
{% endblock %} marcador/templates/marcador/ bookmark_list.html

Slide 60

Slide 60 text

Django in freier Wildbahn

Slide 61

Slide 61 text

Django in freier Wildbahn ZDF - Die letzte Spur

Slide 62

Slide 62 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post

Slide 63

Slide 63 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket

Slide 64

Slide 64 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio

Slide 65

Slide 65 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone

Slide 66

Slide 66 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons

Slide 67

Slide 67 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel

Slide 68

Slide 68 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack

Slide 69

Slide 69 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare

Slide 70

Slide 70 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus

Slide 71

Slide 71 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic

Slide 72

Slide 72 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic Canonical

Slide 73

Slide 73 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic Canonical Instagram

Slide 74

Slide 74 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic Canonical Instagram The New York Times

Slide 75

Slide 75 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic Canonical Instagram The New York Times Lanyrd

Slide 76

Slide 76 text

Django in freier Wildbahn ZDF - Die letzte Spur Washington Post BitBucket Rdio Vodafone Mozilla Add-Ons Discovery Channel OpenStack VMWare Disqus National Geographic Canonical Instagram The New York Times Lanyrd ubuntuusers.de

Slide 77

Slide 77 text

Gute Gründe für Django

Slide 78

Slide 78 text

Gute Gründe für Django 1. Full Stack Framework

Slide 79

Slide 79 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration

Slide 80

Slide 80 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration 3. Klare Strukturen & APIs

Slide 81

Slide 81 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration 3. Klare Strukturen & APIs 4. Umfangreiche Dokumentation

Slide 82

Slide 82 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration 3. Klare Strukturen & APIs 4. Umfangreiche Dokumentation 5. Wiederverwendbare Apps

Slide 83

Slide 83 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration 3. Klare Strukturen & APIs 4. Umfangreiche Dokumentation 5. Wiederverwendbare Apps 6. Stabile und regelmäßige Releases

Slide 84

Slide 84 text

Gute Gründe für Django 1. Full Stack Framework 2. Sichere Standardkonfiguration 3. Klare Strukturen & APIs 4. Umfangreiche Dokumentation 5. Wiederverwendbare Apps 6. Stabile und regelmäßige Releases 7. Mehr als 4.500 weitere Django Pakete

Slide 85

Slide 85 text

Django 1.5

Slide 86

Slide 86 text

Neue Features

Slide 87

Slide 87 text

Neue Features • experimentelle Unterstützung für Python 3

Slide 88

Slide 88 text

Neue Features • experimentelle Unterstützung für Python 3 • konfigurierbares Model für Benutzer

Slide 89

Slide 89 text

Neue Features • experimentelle Unterstützung für Python 3 • konfigurierbares Model für Benutzer • Speichern eines Subsets der Modelfelder

Slide 90

Slide 90 text

Neue Features • experimentelle Unterstützung für Python 3 • konfigurierbares Model für Benutzer • Speichern eines Subsets der Modelfelder • Caching von „related model instances“

Slide 91

Slide 91 text

Neue Features • experimentelle Unterstützung für Python 3 • konfigurierbares Model für Benutzer • Speichern eines Subsets der Modelfelder • Caching von „related model instances“ • verbessertes HTTP-Streaming

Slide 92

Slide 92 text

Neue Features • experimentelle Unterstützung für Python 3 • konfigurierbares Model für Benutzer • Speichern eines Subsets der Modelfelder • Caching von „related model instances“ • verbessertes HTTP-Streaming • Unterstützung von PostGIS 2.0

Slide 93

Slide 93 text

konfigurierbares Model für Benutzer # mysite/settings.py AUTH_USER_MODEL = 'myapp.MyUser' # myapp/models.py from django.db import models from contrib.auth.models import AbstractBaseUser class MyUser(AbstractBaseUser): identifier = models.CharField(max_length=40, unique=True, db_index=True) ... USERNAME_FIELD = 'identifier' ... date_of_birth = models.DateField() height = models.FloatField() ... REQUIRED_FIELDS = ['date_of_birth', 'height']

Slide 94

Slide 94 text

Speichern eines Subsets der Modelfelder >>> product.name = 'Name changed again' >>> product.save() >>> product.save(update_fields=['name'])

Slide 95

Slide 95 text

Caching von „related model instances“ >>> first_poll = Poll.objects.all()[0] >>> first_choice = first_poll.choice_set.all()[0] >>> first_choice.poll is first_poll # kein neuer SQL Query True

Slide 96

Slide 96 text

Django Workshop Freitag, 24. Mai 2013 13:00 bis 17:00 Uhr Weimar III

Slide 97

Slide 97 text

Fragen? www.inqbus.de www.keimlink.de @keimlink