Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python i Django - szybkie i łatwe tworzenie apl...

Python i Django - szybkie i łatwe tworzenie aplikacji webowych

Prezentacja została pokazana na konferencji 4Developers 2008 w Krakowie.

Marcin Mierzejewski

March 07, 2009
Tweet

More Decks by Marcin Mierzejewski

Other Decks in Programming

Transcript

  1. Python. Open Source Platformy: • Windows • Linux • ...

    Implementacja: CPython, JPython, IronPython, PyPy, Psyco
  2. Interpreter ~$ python >>> print 'hello 4developers' hello 4developers >>>

    tekst = 'Python i Djnago' >>> print tekst[0] P >>> print tekst[:6], tekst[-6:] Python Django >>> print tekst[9:11] * 3 DjDjDj
  3. Strukturalny a = 10 if a > 5: print 'większe'

    else: print 'mniejsze' for i in ['A', 'be', 3, 4.5, True]: print i
  4. Obiektowy class A: def funkcja_a(self): print 'A' class B(A): def

    funkcja_b(self): self.funkcja_a() print 'B' a = A() a.funkcja_a() ----------> A b = B() b.funkcja_b() ----------> A B
  5. Funkcyjny def silnia(x): if x == 0: return 1 else:

    return x * silnia(x-1) silnia(10) silnia = lambda x: (1 if x == 0 else x * silnia(x-1)) silnia(10)
  6. Historia 2003: Kansas, USA 2005: BSD i v0.90 2006: v0.95

    2007: v0.96 2008: Fundacja i v1.0 2009: EuroDjango
  7. Architektura MVC (MTV Model Template View) Model - dane View

    (widok) - logika Template (szablon) - prezentacja
  8. Model class Kategoria(models.Model): nazwa = models.CharField(max_length=200) slug = models.SlugField(unique=True) class

    Wpis(models.Model): tytul = models.CharField(max_length=200) slug = models.SlugField(unique=True) tresc = models.TextField() data = models.DateTimeField(default=datetime.now) kategorie = models.ManyToManyField(Kategoria)
  9. Model API >>> kategoria = Kategoria(slug='django', nazwa='Django') >>> kategoria.save() >>>

    print kategoria.nazwa U'Django' >>> kategorie = Katregoria.objects.all() >>> kategorie = Katregoria.objects.filter(slug='django') >>> kategorie [<Katrgoria: Kategoria object>] >>> wpis = Wpis(slug='witam', tytul='Witam', tresc='') >>> wpis.save() >>> wpis.kategorie.add( kategorie[0] ) >>> print wpis.kategorie.all() [<Katrgoria: Kategoria object>]
  10. Widok def wpis_lista(request): wpisy = Wpis.objects.all()[:5] return render_to_response('lista.html', \ {'wpisy':

    wpisy}) def wpis_szczegoly(request, slug): wpis = get_object_or_404(Wpis, slug = slug) return render_to_response('szczegoly.html', \ {'wpis': wpis})
  11. Szablon {{ zmienne }}, {% tagi %} i {{ zmienne|filtry

    }} <html> <head><title>Mój blog</title></head> <body> {% for wpis in wpisy %} <h1>{{ wpis.tytul|upper }}</h1> {{ wpis.tresc }}<br/> Opublikowano {{ wpis.data|date:"d F Y" }}, <a href=”{{ wpis.get_absolute_url }}”>link</a>. {% endfor %} </body> </html>
  12. Projekt # django-admin.py startproject projekt projekt/ __init__.py manage.py settings.py [1]

    urls.py [2] [1] [2] DATABASE_ENGINE from django.contrib import admin DATABASE_NAME admin.autodiscover() INSTALLED_APPS = ( ... (r'^admin/(.*)', include('admin.site.root')) 'django.contrib.admin'
  13. Tabele projekt# manage.py syncdb Creating table auth_permission Creating table auth_group

    Creating table auth_user Creating table auth_message Creating table django_content_type Creating table django_session Creating table django_site ......................... projekt# manage.py runserver Validating models... 0 errors found Django version 1.0-final-SVN-unknown, .......... Development server is running at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
  14. Blog projekt# manage.py startapp blog projekt/ settings.py ← INSTALLED_APPS =

    ( ... ... 'blog',) blog/ __init__.py models.py views.py
  15. models.py projekt/blog/models.py class Wpis(models.Model): tytul = models.CharField(max_length=200) slug = models.SlugField(unique=True)

    tresc = models.TextField() data = models.DateTimeField(default=datetime.now) def __unicode__(self): return u'%s' % self.tytul admin.site.register(Wpis)
  16. views.py projekt/blog/views.py def wpis_lista(request): wpisy = Wpis.objects.all().order_by('-data')[:5] return render_to_response('lista.html', \

    {'wpisy': wpisy}) def wpis_szczegoly(request, slug): wpis = get_object_or_404(Wpis, slug = slug) return render_to_response('szczegoly.html', \ {'wpis': wpis})
  17. Szablony projekt/template/lista.html <html> <body> {% for wpis in wpisy %}

    <h1>{{ wpis.tytul|upper }}</h1> {{ wpis.tresc }}<br> Opublikowano {{ wpis.data|date:"d F Y" }}<br/> <a href="/{{ wpis.slug }}/">Link</a> {% endfor %} </body> </html> projekt/template/szczegoly.html <html> <body> <h1>{{ wpis.tytul|upper }}</h1> {{ wpis.tresc }}<br> Opublikowano {{ wpis.data|date:"d F Y" }}<br/> </body> </html>
  18. Statystyki views.py + models.py + settings.py + urls.py = 30

    LoC lista.html + szczegoly.html = 17 LoC