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


Recommended