SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
The Web framework
for perfectionists with deadlines
     Markus Zapke-Gründemann
    Webmontag Leipzig 29.03.2010
Übersicht
• Über mich          • Django in
                       Deutschland
• Was ist Django?
                     • Weiterführende Links
• Python
                     • DjangoCon Europe
• Architektur
                     • Workshop in Leipzig
• Django in freier
  Wildbahn
Markus
  Zapke-Gründemann
• Softwareentwickler seit 2001
• Schwerpunkt: Web Application
  Development mit Python und PHP
• Django, Symfony & Zend Framework
• Freier Softwareentwickler und Berater seit
  2008
• www.keimlink.de
Was ist Django?
Jean "Django" Reinhardt
  23.1.1910 - 16.5.1953
   Bildquelle: http://en.wikipedia.org/wiki/File:Django9.jpg
Was ist Django?
• Web Application Framework
• In Python geschrieben
• Open Source Software (BSD Lizenz)
• Django Software Foundation
• Umfangreiche Dokumentation
• Große, freundliche Community
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
Und natürlich Ponies!
Ponies?
Ponies?
The Python logo is a trademark of the Python Software Foundation.
Guido van Rossum begann 1989 mit der
       Entwicklung von Python
      Bildquelle: http://commons.wikimedia.org/wiki/File:Guido_van_Rossum_OSCON_2006.jpg
class Input(Widget):
    """
    Base class for all <input> widgets (except type='checkbox' and
    type='radio', which are special).
    """
    input_type = None # Subclasses must define this.

   def render(self, name, value, attrs=None):
       if value is None: value = ''
       final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
       if value != '':
           # Only add the 'value' attribute if a value is non-empty.
           final_attrs['value'] = force_unicode(formats.localize_input(value))
       return mark_safe(u'<input%s />' % flatatt(final_attrs))




    Objektorientierte Sprache
Große Standardbibliothek
      Bildquelle: http://www.flickr.com/photos/jhoweaa/327651705/
Unit Testing
Bildquelle: http://www.flickr.com/photos/sidelong/246816211/
Viele Betriebssysteme
  Alle Logos und Warenzeichen auf dieser Seite sind Eigentum der jeweiligen Besitzer und Lizenzhalter.
Gutes Programmierwerkzeug
      Bildquelle: http://www.flickr.com/photos/philentropist/176054470/
Freie Software
  Bildquelle: http://www.flickr.com/photos/gagilas/3809232008/
WSGI, FastCGI, mod_python
      Bildquelle: http://www.flickr.com/photos/torkildr/3462607995/
Architektur
Full Stack Framework
Middleware




                                                                Tags Filter XML JSON YAML RSS Atom
                            Testing
                    Cache
             i18n




                                      Validatoren

                                                    Formulare
                                                                Template         Serializer   Syndication

                                                                                   View
    Object Relational
        Mapper                                                                   URLConf

             Models                                              Applications                 Admin

                                                                Unicode

Datenbanken                                                             Python
Webserver
Webserver
Webserver


URLConf
Webserver


URLConf               Middleware
Webserver


URLConf               Middleware
Webserver


URLConf               Middleware


            View
Webserver


URLConf               Middleware


            View
Webserver


URLConf                 Middleware


             View




          Model (ORM)
Webserver


URLConf                 Middleware


             View




          Model (ORM)
Webserver


URLConf                 Middleware


             View




          Model (ORM)




           Datenbank
Webserver


URLConf                 Middleware


             View




          Model (ORM)




           Datenbank
Webserver


URLConf                 Middleware


             View


                         Template


          Model (ORM)




           Datenbank
Webserver


URLConf                 Middleware


             View


                         Template


          Model (ORM)




           Datenbank
Webserver


URLConf                 Middleware


             View


                         Template


          Model (ORM)

                        Tags & Filter


           Datenbank
Webserver


URLConf                 Middleware


             View


                         Template


          Model (ORM)

                        Tags & Filter


           Datenbank
Model
from django.db import models

class Musician(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    instrument = models.CharField(max_length=100)

class Album(models.Model):
    artist = models.ForeignKey(Musician)
    name = models.CharField(max_length=100)
    release_date = models.DateField()
    num_stars = models.IntegerField()
URLConf
from django.conf.urls.defaults import *

extra_patterns = patterns('',
    url(r'reports/(?P<id>d+)/$', 'credit.views.report', name='credit-reports'),
    url(r'charge/$', 'credit.views.charge', name='credit-charge'),
)

urlpatterns = patterns('',
    url(r'^$', 'apps.main.views.homepage', name='site-homepage'),
    (r'^help/', include('apps.help.urls')),
    (r'^credit/', include(extra_patterns)),
)
View

from django.shortcuts import render_to_response, get_object_or_404

from ponyfarm.models import Farm

def farm(request, farm_id):
    farm = get_object_or_404(Farm, pk=farm_id)
    return render_to_response('ponyfarm/farm.html', {'farm': farm})
Template
<html>
<head>
    <title>{% block title %}My Pony Farm{% endblock %}</title>
</head>
<body>
    <h2>My Pony Farm</h2>
    {% block content %}
    {% endblock %}
</body>
</html>



{% extends "base.html" %}
{% block title %}{{ block.super }} - {{ farm.title }}{% endblock %}
{% block content %}
    <h3>{{ farm.title }}</h3>
    <p>{{ farm.description|linebreaks }}</a></p>
    <p><a href="{% url ponyfarm_object_list %}">back to overview</a></p>
{% endblock %}
Eingebauter Webserver
 $ python manage.py runserver
 Validating models...
 0 errors found

 Django version 1.1.1, using settings 'ponysite.settings'
 Development server is running at http://127.0.0.1:8000/
 Quit the server with CONTROL-C.
 [25/Mar/2010 17:48:50] "GET /admin/ HTTP/1.1" 200 1686
 [25/Mar/2010 17:49:04] "POST /admin/ HTTP/1.1" 302 0
 [25/Mar/2010 17:49:04] "GET /admin/ HTTP/1.1" 200 5674
 [25/Mar/2010 17:49:08] "GET /admin/auth/user/ HTTP/1.1" 200 4788
 [25/Mar/2010 17:49:14] "GET /admin/ HTTP/1.1" 200 5674
 [25/Mar/2010 17:49:17] "GET /admin/auth/user/ HTTP/1.1" 200 4788
Admin
Django
in freier Wildbahn
www.ljworld.com
www.theonion.com
   Bildquelle: http://twitter.com/TheOnion/status/10921296161
www.everyblock.com
disqus.com
www.rapidsms.org
   Bildquelle: http://www.rapidsms.org/about/take-the-tour/
filmaster.com
trailmapping.com
Django
in Deutschland
Django-Entwickler
     Bildquelle: http://djangopeople.net/de/
Deutscher
   Django-Verein e.V.
• Gegründet im Dezember 2009
• 16 Mitglieder
• Kommunikation der Entwickler und
  Anwender fördern
• Weiterentwicklung von Django voran
  treiben
• www.django-de.org
Weiterführende Links
• www.djangoproject.com
• www.djangobook.com/en/2.0
• djangoplugables.com
• www.djangosnippets.org
• www.python.org
• www.diveintopython.org
DjangoCon Europe
Python & Django
       Workshop
• 17. April 2010
• Python: 9:00 bis 13:00 Uhr
• Django: 14:00 bis 18:00 Uhr
• Im Coworking Space „Le Space“
• Unkostenbeitrag: 10 EUR
• Anmeldung: info@keimlink.de
Lizenz
 Dieses Werk ist unter einem Creative Commons
    Namensnennung-Weitergabe unter gleichen
Bedingungen 3.0 Unported Lizenzvertrag lizenziert.
    Um die Lizenz anzusehen, gehen Sie bitte zu
http://creativecommons.org/licenses/by-sa/3.0/ oder
schicken Sie einen Brief an Creative Commons, 171
 Second Street, Suite 300, San Francisco, California
                    94105, USA.

Django is a registered trademark of the Django Software Foundation.

Weitere ähnliche Inhalte

Andere mochten auch

Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCMindfire Solutions
 
2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论 2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论 Na Lee
 
Overview of Testing Talks at Pycon
Overview of Testing Talks at PyconOverview of Testing Talks at Pycon
Overview of Testing Talks at PyconJacqueline Kazil
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework  for perfectionists with deadlinesDjango - The Web framework  for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesMarkus Zapke-Gründemann
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia ContiniWEBdeBS
 
The Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.pyThe Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.pyTzu-ping Chung
 
Rabbitmq & Postgresql
Rabbitmq & PostgresqlRabbitmq & Postgresql
Rabbitmq & PostgresqlLucio Grenzi
 
라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘Jiho Lee
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - ChiusuraWEBdeBS
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - AperturaWEBdeBS
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1Ke Wei Louis
 
Django mongodb -djangoday_
Django mongodb -djangoday_Django mongodb -djangoday_
Django mongodb -djangoday_WEBdeBS
 

Andere mochten auch (20)

Authentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVCAuthentication & Authorization in ASPdotNet MVC
Authentication & Authorization in ASPdotNet MVC
 
Vim for Mere Mortals
Vim for Mere MortalsVim for Mere Mortals
Vim for Mere Mortals
 
EuroDjangoCon 2009 - Ein Rückblick
EuroDjangoCon 2009 - Ein RückblickEuroDjangoCon 2009 - Ein Rückblick
EuroDjangoCon 2009 - Ein Rückblick
 
2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论 2007 - 应用系统脆弱性概论
2007 - 应用系统脆弱性概论
 
Digesting jQuery
Digesting jQueryDigesting jQuery
Digesting jQuery
 
Html5 History-API
Html5 History-APIHtml5 History-API
Html5 History-API
 
Overview of Testing Talks at Pycon
Overview of Testing Talks at PyconOverview of Testing Talks at Pycon
Overview of Testing Talks at Pycon
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework  for perfectionists with deadlinesDjango - The Web framework  for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
 
2 × 3 = 6
2 × 3 = 62 × 3 = 6
2 × 3 = 6
 
PythonBrasil[8] closing
PythonBrasil[8] closingPythonBrasil[8] closing
PythonBrasil[8] closing
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
 
The Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.pyThe Django Book Chapter 9 - Django Workshop - Taipei.py
The Django Book Chapter 9 - Django Workshop - Taipei.py
 
Rabbitmq & Postgresql
Rabbitmq & PostgresqlRabbitmq & Postgresql
Rabbitmq & Postgresql
 
라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘라이트닝 토크 2015 파이콘
라이트닝 토크 2015 파이콘
 
User-centered open source
User-centered open sourceUser-centered open source
User-centered open source
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
 
Super Advanced Python –act1
Super Advanced Python –act1Super Advanced Python –act1
Super Advanced Python –act1
 
Website optimization
Website optimizationWebsite optimization
Website optimization
 
Django mongodb -djangoday_
Django mongodb -djangoday_Django mongodb -djangoday_
Django mongodb -djangoday_
 

Ähnlich wie Django - The Web framework for perfectionists with deadlines

Webbrowser-Automatisierung mit Python und Selenium WebDriver
Webbrowser-Automatisierung mit Python und Selenium WebDriverWebbrowser-Automatisierung mit Python und Selenium WebDriver
Webbrowser-Automatisierung mit Python und Selenium WebDriverAndi Albrecht
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBTobias Trelle
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenHendrik Lösch
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenChristian Münch
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und ReflectionStefan Marr
 
Infopark CMS Fiona mit Ruby on Rails
Infopark CMS Fiona mit Ruby on RailsInfopark CMS Fiona mit Ruby on Rails
Infopark CMS Fiona mit Ruby on RailsJustRelate
 
ASP.NET MVC 2 - Eine Einführung
ASP.NET MVC 2 - Eine EinführungASP.NET MVC 2 - Eine Einführung
ASP.NET MVC 2 - Eine EinführungNETUserGroupBern
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht SkriptsprachenA. LE
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1Oliver Lemm
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungEduard Hildebrandt
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
iDocIt - Ein Assistent zur API-Dokumentation
iDocIt - Ein Assistent zur API-DokumentationiDocIt - Ein Assistent zur API-Dokumentation
iDocIt - Ein Assistent zur API-DokumentationJan Christian Krause
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Frontend-Performance @ IPC
Frontend-Performance @ IPCFrontend-Performance @ IPC
Frontend-Performance @ IPCNico Steiner
 

Ähnlich wie Django - The Web framework for perfectionists with deadlines (20)

Webbrowser-Automatisierung mit Python und Selenium WebDriver
Webbrowser-Automatisierung mit Python und Selenium WebDriverWebbrowser-Automatisierung mit Python und Selenium WebDriver
Webbrowser-Automatisierung mit Python und Selenium WebDriver
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Ionic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf SteroidenIonic 2 - Hybridapps auf Steroiden
Ionic 2 - Hybridapps auf Steroiden
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
Abläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisierenAbläufe mit PHP und Phing automatisieren
Abläufe mit PHP und Phing automatisieren
 
Metaprogrammierung und Reflection
Metaprogrammierung und ReflectionMetaprogrammierung und Reflection
Metaprogrammierung und Reflection
 
Infopark CMS Fiona mit Ruby on Rails
Infopark CMS Fiona mit Ruby on RailsInfopark CMS Fiona mit Ruby on Rails
Infopark CMS Fiona mit Ruby on Rails
 
ASP.NET MVC 2 - Eine Einführung
ASP.NET MVC 2 - Eine EinführungASP.NET MVC 2 - Eine Einführung
ASP.NET MVC 2 - Eine Einführung
 
Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht Skriptsprachen
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
iDocIt - Ein Assistent zur API-Dokumentation
iDocIt - Ein Assistent zur API-DokumentationiDocIt - Ein Assistent zur API-Dokumentation
iDocIt - Ein Assistent zur API-Dokumentation
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Sitecore. Ready to Start. Software Engineer
Sitecore. Ready to Start. Software EngineerSitecore. Ready to Start. Software Engineer
Sitecore. Ready to Start. Software Engineer
 
Ionic 3
Ionic 3Ionic 3
Ionic 3
 
Frontend-Performance @ IPC
Frontend-Performance @ IPCFrontend-Performance @ IPC
Frontend-Performance @ IPC
 

Mehr von Markus Zapke-Gründemann

Writing multi-language documentation using Sphinx
Writing multi-language documentation using SphinxWriting multi-language documentation using Sphinx
Writing multi-language documentation using SphinxMarkus Zapke-Gründemann
 
Sichere Web-Applikationen am Beispiel von Django
Sichere Web-Applikationen am Beispiel von DjangoSichere Web-Applikationen am Beispiel von Django
Sichere Web-Applikationen am Beispiel von DjangoMarkus Zapke-Gründemann
 
Virtuelle Maschinen mit Packer, Vagrant und Salt bauen
Virtuelle Maschinen mit Packer, Vagrant und Salt bauenVirtuelle Maschinen mit Packer, Vagrant und Salt bauen
Virtuelle Maschinen mit Packer, Vagrant und Salt bauenMarkus Zapke-Gründemann
 
Writing multi-language documentation using Sphinx
Writing multi-language documentation using SphinxWriting multi-language documentation using Sphinx
Writing multi-language documentation using SphinxMarkus Zapke-Gründemann
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für djangoMarkus Zapke-Gründemann
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvMarkus Zapke-Gründemann
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoMarkus Zapke-Gründemann
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvMarkus Zapke-Gründemann
 
Bottle - Python Web Microframework (english)
Bottle - Python Web Microframework (english)Bottle - Python Web Microframework (english)
Bottle - Python Web Microframework (english)Markus Zapke-Gründemann
 

Mehr von Markus Zapke-Gründemann (10)

Writing multi-language documentation using Sphinx
Writing multi-language documentation using SphinxWriting multi-language documentation using Sphinx
Writing multi-language documentation using Sphinx
 
Sichere Web-Applikationen am Beispiel von Django
Sichere Web-Applikationen am Beispiel von DjangoSichere Web-Applikationen am Beispiel von Django
Sichere Web-Applikationen am Beispiel von Django
 
Virtuelle Maschinen mit Packer, Vagrant und Salt bauen
Virtuelle Maschinen mit Packer, Vagrant und Salt bauenVirtuelle Maschinen mit Packer, Vagrant und Salt bauen
Virtuelle Maschinen mit Packer, Vagrant und Salt bauen
 
Writing multi-language documentation using Sphinx
Writing multi-language documentation using SphinxWriting multi-language documentation using Sphinx
Writing multi-language documentation using Sphinx
 
Mercurial
MercurialMercurial
Mercurial
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für django
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für Django
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Bottle - Python Web Microframework (english)
Bottle - Python Web Microframework (english)Bottle - Python Web Microframework (english)
Bottle - Python Web Microframework (english)
 

Django - The Web framework for perfectionists with deadlines

  • 1. The Web framework for perfectionists with deadlines Markus Zapke-Gründemann Webmontag Leipzig 29.03.2010
  • 2. Übersicht • Über mich • Django in Deutschland • Was ist Django? • Weiterführende Links • Python • DjangoCon Europe • Architektur • Workshop in Leipzig • Django in freier Wildbahn
  • 3. Markus Zapke-Gründemann • Softwareentwickler seit 2001 • Schwerpunkt: Web Application Development mit Python und PHP • Django, Symfony & Zend Framework • Freier Softwareentwickler und Berater seit 2008 • www.keimlink.de
  • 5. Jean "Django" Reinhardt 23.1.1910 - 16.5.1953 Bildquelle: http://en.wikipedia.org/wiki/File:Django9.jpg
  • 6. Was ist Django? • Web Application Framework • In Python geschrieben • Open Source Software (BSD Lizenz) • Django Software Foundation • Umfangreiche Dokumentation • Große, freundliche Community
  • 7. 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
  • 11. The Python logo is a trademark of the Python Software Foundation.
  • 12. Guido van Rossum begann 1989 mit der Entwicklung von Python Bildquelle: http://commons.wikimedia.org/wiki/File:Guido_van_Rossum_OSCON_2006.jpg
  • 13. class Input(Widget): """ Base class for all <input> widgets (except type='checkbox' and type='radio', which are special). """ input_type = None # Subclasses must define this. def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) if value != '': # Only add the 'value' attribute if a value is non-empty. final_attrs['value'] = force_unicode(formats.localize_input(value)) return mark_safe(u'<input%s />' % flatatt(final_attrs)) Objektorientierte Sprache
  • 14. Große Standardbibliothek Bildquelle: http://www.flickr.com/photos/jhoweaa/327651705/
  • 16. Viele Betriebssysteme Alle Logos und Warenzeichen auf dieser Seite sind Eigentum der jeweiligen Besitzer und Lizenzhalter.
  • 17. Gutes Programmierwerkzeug Bildquelle: http://www.flickr.com/photos/philentropist/176054470/
  • 18. Freie Software Bildquelle: http://www.flickr.com/photos/gagilas/3809232008/
  • 19. WSGI, FastCGI, mod_python Bildquelle: http://www.flickr.com/photos/torkildr/3462607995/
  • 21. Full Stack Framework Middleware Tags Filter XML JSON YAML RSS Atom Testing Cache i18n Validatoren Formulare Template Serializer Syndication View Object Relational Mapper URLConf Models Applications Admin Unicode Datenbanken Python
  • 22.
  • 26. Webserver URLConf Middleware
  • 27. Webserver URLConf Middleware
  • 28. Webserver URLConf Middleware View
  • 29. Webserver URLConf Middleware View
  • 30. Webserver URLConf Middleware View Model (ORM)
  • 31. Webserver URLConf Middleware View Model (ORM)
  • 32. Webserver URLConf Middleware View Model (ORM) Datenbank
  • 33. Webserver URLConf Middleware View Model (ORM) Datenbank
  • 34. Webserver URLConf Middleware View Template Model (ORM) Datenbank
  • 35. Webserver URLConf Middleware View Template Model (ORM) Datenbank
  • 36. Webserver URLConf Middleware View Template Model (ORM) Tags & Filter Datenbank
  • 37. Webserver URLConf Middleware View Template Model (ORM) Tags & Filter Datenbank
  • 38. Model from django.db import models class Musician(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) instrument = models.CharField(max_length=100) class Album(models.Model): artist = models.ForeignKey(Musician) name = models.CharField(max_length=100) release_date = models.DateField() num_stars = models.IntegerField()
  • 39. URLConf from django.conf.urls.defaults import * extra_patterns = patterns('', url(r'reports/(?P<id>d+)/$', 'credit.views.report', name='credit-reports'), url(r'charge/$', 'credit.views.charge', name='credit-charge'), ) urlpatterns = patterns('', url(r'^$', 'apps.main.views.homepage', name='site-homepage'), (r'^help/', include('apps.help.urls')), (r'^credit/', include(extra_patterns)), )
  • 40. View from django.shortcuts import render_to_response, get_object_or_404 from ponyfarm.models import Farm def farm(request, farm_id): farm = get_object_or_404(Farm, pk=farm_id) return render_to_response('ponyfarm/farm.html', {'farm': farm})
  • 41. Template <html> <head> <title>{% block title %}My Pony Farm{% endblock %}</title> </head> <body> <h2>My Pony Farm</h2> {% block content %} {% endblock %} </body> </html> {% extends "base.html" %} {% block title %}{{ block.super }} - {{ farm.title }}{% endblock %} {% block content %} <h3>{{ farm.title }}</h3> <p>{{ farm.description|linebreaks }}</a></p> <p><a href="{% url ponyfarm_object_list %}">back to overview</a></p> {% endblock %}
  • 42. Eingebauter Webserver $ python manage.py runserver Validating models... 0 errors found Django version 1.1.1, using settings 'ponysite.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. [25/Mar/2010 17:48:50] "GET /admin/ HTTP/1.1" 200 1686 [25/Mar/2010 17:49:04] "POST /admin/ HTTP/1.1" 302 0 [25/Mar/2010 17:49:04] "GET /admin/ HTTP/1.1" 200 5674 [25/Mar/2010 17:49:08] "GET /admin/auth/user/ HTTP/1.1" 200 4788 [25/Mar/2010 17:49:14] "GET /admin/ HTTP/1.1" 200 5674 [25/Mar/2010 17:49:17] "GET /admin/auth/user/ HTTP/1.1" 200 4788
  • 43. Admin
  • 46. www.theonion.com Bildquelle: http://twitter.com/TheOnion/status/10921296161
  • 49. www.rapidsms.org Bildquelle: http://www.rapidsms.org/about/take-the-tour/
  • 53. Django-Entwickler Bildquelle: http://djangopeople.net/de/
  • 54. Deutscher Django-Verein e.V. • Gegründet im Dezember 2009 • 16 Mitglieder • Kommunikation der Entwickler und Anwender fördern • Weiterentwicklung von Django voran treiben • www.django-de.org
  • 55. Weiterführende Links • www.djangoproject.com • www.djangobook.com/en/2.0 • djangoplugables.com • www.djangosnippets.org • www.python.org • www.diveintopython.org
  • 57. Python & Django Workshop • 17. April 2010 • Python: 9:00 bis 13:00 Uhr • Django: 14:00 bis 18:00 Uhr • Im Coworking Space „Le Space“ • Unkostenbeitrag: 10 EUR • Anmeldung: info@keimlink.de
  • 58. Lizenz Dieses Werk ist unter einem Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenzvertrag lizenziert. Um die Lizenz anzusehen, gehen Sie bitte zu http://creativecommons.org/licenses/by-sa/3.0/ oder schicken Sie einen Brief an Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Django is a registered trademark of the Django Software Foundation.