django: schnell performante web-applikationen entwicklen

104
Schnell performante Web-Applikationen entwickeln Markus Zapke-Gründemann LinuxTag 2012

Upload: markus-zapke-gruendemann

Post on 20-Apr-2015

113 views

Category:

Documents


0 download

DESCRIPTION

Django ist ein in Python geschriebenes Framework, dass die schnelle Entwicklung von Web-Applikationen ermöglicht. Dabei wird Wert auf sauberen Code und die Wiederverwendbarkeit von einzelnen Komponenten gelegt.Die Kernkomponenten des Frameworks sind der Object-Relational-Mapper (ORM), die Views und die Template Engine. Alle diese Komponenten sowie deren Zusammenspiel mit dem Routing und der Middleware werden in diesem Vortrag vorgestellt.Der Object-Relational-Mapper (ORM) ermöglicht einen einfachen und schnellen Zugriff auf die Datenbank. Dabei werden verschiedene Datenbanken unterstützt.Das automatisch erzeugte Admin-Interface hilft bei der Erstellung und Bearbeitung der Daten.Die Daten werden dann in sogenannten Views aufbereitet und mit Hilfe der Template Engine gerändert. Zur Verarbeitung von Formularen stehen mächtige Formular- und Validations-Werkzeuge zur Verfügung.Alle URLs können leicht an die Bedürfnisse des jeweiligen Projekts angepasst werden. Das gleiche gilt auch für die Templates.Django macht auch das Testen der eignen Applikationen einfach. Dieser Vortrag wird dies ebenfalls darstellen.Auf der Django-Website steht eine umfangreiche englische Dokumentation zur Verfügung.Django wird als Open Source Software unter einer BSD-Lizenz verteilt.

TRANSCRIPT

Page 1: Django: Schnell performante Web-Applikationen entwicklen

Schnell performanteWeb-Applikationen entwickeln

Markus Zapke-GründemannLinuxTag 2012

Page 2: Django: Schnell performante Web-Applikationen entwicklen

Übersicht• Vorstellung

• Was ist Django?

• Architektur

• Code

• Django Roadmap

• Entwicklungsprozess

• Django in Zahlen

• Django in freier Wildbahn

• Nützliche Django Apps

Page 3: Django: Schnell performante Web-Applikationen entwicklen

MarkusZapke-Gründemann

• Softwareentwickler seit 2001

• Softwareentwicklung mit Python, Django und Mercurial

• Selbstständig seit 2008

• Seit 2011 Geschäftsführer bei Inqbus

Page 4: Django: Schnell performante Web-Applikationen entwicklen

Was ist Django?

Page 5: Django: Schnell performante Web-Applikationen entwicklen

Bildquelle: http://en.wikipedia.org/wiki/File:Django_Reinhardt_%28Gottlieb_07301%29.jpg

Django Reinhardt* 23.1.1910✝ 16.5.1953

Page 6: Django: Schnell performante Web-Applikationen entwicklen

Was ist Django?

• Web Application Framework

• In Python geschrieben

• Open Source Software (BSD Lizenz)

• Django Software Foundation

• Umfangreiche Dokumentation

• Große, freundliche Community

Page 7: Django: Schnell performante Web-Applikationen entwicklen

Was ist Django?

• 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

Page 8: Django: Schnell performante Web-Applikationen entwicklen

www.djangoproject.com

Page 9: Django: Schnell performante Web-Applikationen entwicklen

Und natürlich Ponies!

Page 10: Django: Schnell performante Web-Applikationen entwicklen

Ponies?

Page 11: Django: Schnell performante Web-Applikationen entwicklen

Ponies?

Page 12: Django: Schnell performante Web-Applikationen entwicklen

Architektur

Page 13: Django: Schnell performante Web-Applikationen entwicklen

MTV

Page 14: Django: Schnell performante Web-Applikationen entwicklen
Page 15: Django: Schnell performante Web-Applikationen entwicklen

Webserver

Page 16: Django: Schnell performante Web-Applikationen entwicklen

Webserver

Page 17: Django: Schnell performante Web-Applikationen entwicklen

Webserver

URLConf

Page 18: Django: Schnell performante Web-Applikationen entwicklen

Webserver

URLConf Middleware

Page 19: Django: Schnell performante Web-Applikationen entwicklen

Webserver

URLConf Middleware

Page 20: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

URLConf Middleware

Page 21: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

URLConf Middleware

Page 22: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Model (ORM)

URLConf Middleware

Page 23: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Model (ORM)

URLConf Middleware

Page 24: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

Model (ORM)

URLConf Middleware

Page 25: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

Model (ORM)

URLConf Middleware

Page 26: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

Model (ORM)

URLConf Middleware

Page 27: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

Model (ORM)

URLConf Middleware

Page 28: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf Middleware

Page 29: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf Middleware

Page 30: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf

Tags & Filter

Middleware

Page 31: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf

Tags & Filter

Middleware

Page 32: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf

Tags & Filter

Middleware

Page 33: Django: Schnell performante Web-Applikationen entwicklen

View

Webserver

Datenbank

TemplateModel (ORM)

URLConf

Tags & Filter

Middleware

Page 34: Django: Schnell performante Web-Applikationen entwicklen
Page 35: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Page 36: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

Page 37: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Page 38: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Page 39: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Page 40: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Page 41: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Page 42: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

Page 43: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Page 44: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Page 45: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

Page 46: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Page 47: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Page 48: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Testing

Page 49: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Testing

Caching

Page 50: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Testing

Caching

i18n & l10n

Page 51: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Testing

Caching

i18n & l10n

Middleware

Page 52: Django: Schnell performante Web-Applikationen entwicklen

Object Relational Mapper

Admin

URLConf

Views

Templates (Tags & Filter)

Sessions

Serializer (JSON, XML, YAML)

Syndication (RSS, Atom)

GeoDjango (GIS)

Formulare

Validation

File Storage

Authentifizierung

Testing

Caching

i18n & l10n

Middleware

Security

Page 53: Django: Schnell performante Web-Applikationen entwicklen

Code

Page 54: Django: Schnell performante Web-Applikationen entwicklen
Page 55: Django: Schnell performante Web-Applikationen entwicklen

$ pip install django

Page 56: Django: Schnell performante Web-Applikationen entwicklen

$ pip install django

$ django-admin.py startproject myproject

Page 57: Django: Schnell performante Web-Applikationen entwicklen

$ pip install django

$ django-admin.py startproject myproject

$ tree myprojectmyproject!"" manage.py#"" myproject !"" __init__.py !"" settings.py !"" urls.py #"" wsgi.py

Page 58: Django: Schnell performante Web-Applikationen entwicklen

$ cd myproject$ python manage.py runserver

Page 59: Django: Schnell performante Web-Applikationen entwicklen
Page 60: Django: Schnell performante Web-Applikationen entwicklen

$ python manage.py startapp pages

Page 61: Django: Schnell performante Web-Applikationen entwicklen

$ tree.!"" manage.py!"" myproject...#"" pages !"" __init__.py !"" models.py !"" tests.py #"" views.py

$ python manage.py startapp pages

Page 62: Django: Schnell performante Web-Applikationen entwicklen

from django.db import models

class Page(models.Model): title = models.CharField(u'Titel', max_length=100) slug = models.SlugField(unique=True) body = models.TextField(u'Inhalt')

class Meta: verbose_name = u'Seite' verbose_name_plural = u'Seiten'

def __unicode__(self): return self.title

myproject/pages/models.py

Page 63: Django: Schnell performante Web-Applikationen entwicklen

from django.contrib import admin

from .models import Page

class PageAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ['title']}

admin.site.register(Page, PageAdmin)

myproject/pages/admin.py

Page 64: Django: Schnell performante Web-Applikationen entwicklen

from django.conf.urls import patterns, include, url

from django.contrib import adminadmin.autodiscover()

urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)),)

myproject/urls.py

Page 65: Django: Schnell performante Web-Applikationen entwicklen

$ python manage.py syncdb$ python manage.py runserver

Page 66: Django: Schnell performante Web-Applikationen entwicklen
Page 67: Django: Schnell performante Web-Applikationen entwicklen
Page 68: Django: Schnell performante Web-Applikationen entwicklen

http://127.0.0.1:8000/willkommen-auf-der-startseite/

Page 69: Django: Schnell performante Web-Applikationen entwicklen

from django.conf.urls import patterns, include, url

from django.contrib import adminadmin.autodiscover()

urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^', include('pages.urls')))

myproject/urls.py

from django.conf.urls import patterns, include, url

urlpatterns = patterns('pages.views', url(r'^(?P<slug>[-\w]+)/$', 'detail'),)

myproject/pages/urls.py

Page 70: Django: Schnell performante Web-Applikationen entwicklen

from django.shortcuts import get_object_or_404, render

from .models import Page

def detail(request, slug): page = get_object_or_404(Page, slug=slug) context = {'object': page} return render(request, 'pages/detail.html', context)

myproject/pages/views.py

Page 71: Django: Schnell performante Web-Applikationen entwicklen

<!doctype html><body> <h1>My Website</h1> {% block content %}{% endblock %}</body></html>

myproject/templates/base.html

{% extends "base.html" %}

{% block content %}<h2>{{ object.title }}</h2><p>{{ object.body|linebreaks }}</p>{% endblock %}

myproject/pages/templates/pages/detail.html

Page 72: Django: Schnell performante Web-Applikationen entwicklen
Page 73: Django: Schnell performante Web-Applikationen entwicklen

Django Roadmap

• Stabile API

• Minor Release alle neun Monate

• Klare Deprecation Timeline

• Ab Django 1.5 experimentelle Python 3.3 Unterstützung

Page 74: Django: Schnell performante Web-Applikationen entwicklen

Entwicklungsprozess

Page 75: Django: Schnell performante Web-Applikationen entwicklen

Models & Admin anlegen

Inhalte erstellen Views anlegen

Deployment

Templates anlegen

Page 76: Django: Schnell performante Web-Applikationen entwicklen

Django in Zahlen

Page 77: Django: Schnell performante Web-Applikationen entwicklen

6.000.000 Besucher der Website pro Monat

Django in Zahlen

Page 78: Django: Schnell performante Web-Applikationen entwicklen

6.000.000 Besucher der Website pro Monat

21.700 Abonnenten der django-users Mailing Liste

Django in Zahlen

Page 79: Django: Schnell performante Web-Applikationen entwicklen

6.000.000 Besucher der Website pro Monat

21.700 Abonnenten der django-users Mailing Liste

> 2.000 Packages im Python Packaging Index (> 10%)

Django in Zahlen

Page 80: Django: Schnell performante Web-Applikationen entwicklen

6.000.000 Besucher der Website pro Monat

21.700 Abonnenten der django-users Mailing Liste

> 2.000 Packages im Python Packaging Index (> 10%)

33 Kern-Entwickler

Django in Zahlen

Page 81: Django: Schnell performante Web-Applikationen entwicklen

6.000.000 Besucher der Website pro Monat

21.700 Abonnenten der django-users Mailing Liste

> 2.000 Packages im Python Packaging Index (> 10%)

33 Kern-Entwickler

> 65 Übersetzungen

Django in Zahlen

Page 82: Django: Schnell performante Web-Applikationen entwicklen

Djangoin freier Wildbahn

Page 83: Django: Schnell performante Web-Applikationen entwicklen
Page 84: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte Spur

Page 85: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

Page 86: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

Rdio

Page 87: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Page 88: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-Ons

Page 89: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

Page 90: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

VMWare

Page 91: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

VMWareDisqus

Page 92: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

VMWareDisqus

Instagram

Page 93: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

VMWareDisqus

InstagramNational Geographic

Page 94: Django: Schnell performante Web-Applikationen entwicklen

ZDF - Die letzte SpurWashington Post

RdioVodafone

Mozilla Add-OnsDiscovery Channel

VMWareDisqus

InstagramNational GeographicThe New York Times

Page 95: Django: Schnell performante Web-Applikationen entwicklen

Nützliche Django Apps

Page 96: Django: Schnell performante Web-Applikationen entwicklen

Django Debug Toolbar

http://robhudson.github.com/django-debug-toolbar/

Page 97: Django: Schnell performante Web-Applikationen entwicklen

Django Debug Toolbar

http://robhudson.github.com/django-debug-toolbar/

Page 98: Django: Schnell performante Web-Applikationen entwicklen

Django Debug Toolbar

http://robhudson.github.com/django-debug-toolbar/

Page 99: Django: Schnell performante Web-Applikationen entwicklen

Schema and Data Migrations

http://south.aeracode.org/

Page 100: Django: Schnell performante Web-Applikationen entwicklen

Celery

Distributed Task Queue

http://celeryproject.org/

Page 101: Django: Schnell performante Web-Applikationen entwicklen

Modular Search

http://haystacksearch.org/

Page 102: Django: Schnell performante Web-Applikationen entwicklen

WSGI HTTP Server for UNIX

http://gunicorn.org/

Page 103: Django: Schnell performante Web-Applikationen entwicklen

www.djangopackages.com

Page 104: Django: Schnell performante Web-Applikationen entwicklen

Fragen?

www.inqbus.de

www.keimlink.de

@keimlink