django - webes keretrendszer mindenkinek
DESCRIPTION
@ Linux Akadémia 2008. Szerencs, 2008. július 11.TRANSCRIPT
webes keretrendszerhatáridőkkel rendelkező
perfekcionistáknak
Farkas SzilveszterLinux Akadémia 2008
Szerencs, 2008. július 11.
webes keretrendszermindenkinek
Farkas SzilveszterLinux Akadémia 2008
Szerencs, 2008. július 11.
tartalomwebes keretrendszerek
módszertanokpéldákPython
gyorstalpaló
tartalomdjango története
alapokbeépített szolgáltatásokkiegészítő szolgáltatások
hasznos alkalmazásoksaját alkalmazás készítése
webes keretrendszerekáltalános tudnivalók
Ruby on Rails2004. július, David Heinemeier Hansson
Basecampbasecamphq.com
A List Apartalistapart.com
Twittertwitter.com
Githubgithub.com
módszertanok
DRY„Don’t Repeat Yourself”
MVC
MVCModel
MVCView
MVCController
automatizmus
példák
RubyMerb, Ruby on Rails
PHPCakePHP, Doctrine, Symfony
PythonDjango, Pylons, TurboGears, Zope
Python
Python programozásSzalay Attila
?
objektumorientált
struktúrált kód
könnyen tanulható
platformfüggetlen
rengeteg modulPython Package Index (PyPI)
interaktív shell/usr/bin/python, IPython
The Zen of Python
>>> import thisThe Zen of Python, by Tim Peters
Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!
gyorstalpaló
tagolás
a = 5if a > 5: print "A nagyobb, mint 5."else: print "A nem nagyobb, mint 5."
függvénydefiníció
def fuggveny(a, b=3): print "Az eredmény:", a + b return a + b
osztálydefiníció
class Osztaly(OsOsztaly): tagvaltozo = 0
def __init__(self): print "Én vagyok a konstruktor."
def tagfuggveny(self, valtozo): self.tagvaltozo += valtozo def negyzet(self): return self.tagvaltozo ** 2
modulok
import sys
from subprocess import Popen
from os.path import join as pathjoin
történet
Adrian HolovatyLawrence Journal-World, Kansas
<1.0 (0.96.2)
alapok
MVC
MTV
MTVModel
MTVTemplate
MTVView
ORMobject-relational mapper
adatoknatív objektumok
lekérdezésekbeépített nyelvi elemekkel támogatva
mezőtípusokbeépített validációval
AutoFieldBooleanFieldCharField
CommaSeparatedIntegerFieldDateField
DateTimeFieldDecimalFieldEmailFieldFileField
FilePathFieldFloatFieldImageField
IntegerFieldIPAddressField
NullBooleanFieldPhoneNumberField
PositiveIntegerFieldPositiveSmallIntegerField
SlugFieldSmallIntegerField
TextFieldTimeFieldURLField
USStateFieldXMLField
kapcsolatoktöbb-egy, több-több, egy-egy
class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()
sablon rendszer
alapvetően html
{% tagek %}
{% block "nev" %}Ide jöhet akármi.{% endblock %}
{% if feltetel %}Feltétel teljesült.{% else %}Nem teljesült a feltétel.{% endif %}
{{ változók }}
{{ valtozo }}
{{ objektum.tagvaltozo }}
{{ objektum.tagfuggveny }}
|szűrők
{{ datum|date:"Y. m. d." }}
2008. 07. 11.
{{ html|escape }}
<strong>Django</strong> (nem Django)
{{ meret|filesizeformat }}
234.5 MB
leszármaztatás
{% extends "base.html" %}{% block "title" %}Másik cím{% endblock %}
<head> <title>{% block "title" %}Oldal címe{% endblock %}</title></head>
base.html
extended.html
nézetek
kérés - válaszHttpRequest - HttpResponse
1. szabályHttpRequest objektumot kapunk
2. szabályHttpResponse objektumot kell visszaadnunk
def nezet(request): response = HttpResponse() return response
urlconfnézetek hozzárendelése url-ekhez
REST(ful)szép url-ek
/cikkek//cikkek/2008/07/11/linux-akademia//felhasznalok//felhasznalok/gipszjakab//uzenetek//uzenetek/1024//uzenetek/1024/szerkesztes//uzenetek/1024/torles/
urlpatterns = patterns('', (r'^cikkek/(\d{4})/$', 'oldalam.views.eves_archivum'), (r'^cikkek/(\d{4})/(\d{2})/$', 'oldalam.views.havi_archivum'), (r'^cikkek/(\d{4})/(\d{2})/(\d+)/$', 'oldalam.views.oldal_reszletek'),)
paraméterátadás
urlpatterns = patterns('', (r'^szavazasok/$', 'oldalam.szavazo.views.kezdo'), (r'^szavazasok/(?P<azon>\d+)/$', 'oldalam.szavazo.views.reszletek'), (r'^szavazasok/(?P<azon>\d+)/eredmenyek/$', 'oldalam.szavazo.views.eredmenyek'), (r'^szavazasok/(?P<azon>\d+)/szavazas/$', 'oldalam.szavazo.views.szavazas'),)
def reszletek(request, azon): sz = get_object_or_404(Szavazas, pk=azon) return render_to_response('szavazas_reszletek.html', {'szavazas': sz})
newformsűrlapok egyszerűen
mezőkhasonlóan a modellekhez
widgetek
validálásbeépített, vagy egyedi
validálásmezőnként, vagy globálisan
modell → űrlap
class ArticleForm(forms.ModelForm): class Meta: model = Article
beépített szolgáltatások
adatbázis hozzáférésMySQL, Oracle, PostgreSQL, SQLite
adatbázis hozzáféréstranzakciókezeléssel
munkamenetek(sessions)
gyorsítótárazás(caching)
honosítás(internationalization)
unicode mindenhol
lapszámozás(pagination)
szerializációXML, JSON, Python, YAML
fájlfeltöltésbármekkora fájlmérettel
middleware-ek
rövidítések(shortcuts)
tesztelés
kiegészítő szolgáltatások
authfelhasználók, csoportok és jogosultságok
adminadminisztrációs felület két sor kóddal
class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()
class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()
class Admin: pass
databrowse„adminisztrációs felület látogatóknak”
flatpagesstatikus oldalak
form previewűrlapon szereplő adatok megerősítése beküldés előtt
form wizardtöbblépéses űrlapok
redirectsátirányítások
sitestöbb honlap egy telepítéshez
sitemapskeresőbarát oldalszerkezet biztosítása
syndicationRSS és Atom hírforrások létrehozása
webdesignLorem Ipsum generátor
hasznos alkalmazások
django-registrationfelhasználók regisztrációjához
django-contact-formrugalmas kapcsolatfelvételi űrlap
django-taggingbármelyik modellünket címkézhetjük vele
django-openidOpenID támogatás implementációja
és még sokan mások...Google Code
saját alkalmazás készítése
1. előkészítésprojekt és alkalmazás létrehozása
2. modellezésadatmodell meghatározása
3. URL-ekmilyen címen mit szolgáltatunk
4. nézelődésnézetek leprogramozása
5. sablonaz alkalmazás kinézetének elkészítése
Köszönöm a figyelmet!http://phanatic.hu/
KöszönetTörök Gábor
http://gábor.20y.hu/django/