Sebesség témája

Szerencsére a böngészőgyártók versenyeznek egymással, ezért - többek között - a javascript motorok is napról napra gyorsabbak lesznek. Eszembe jutott, hogy meg kéne nézni pár egyszerű - és szuperbuta - teszttel, hogy hogyan teljesít a frissen megjelent Google V8.

Hirtelen jött az ötlet, és lusta is vagyok mindenféle grafikont rajzolni, meg bonyolult nyelvek közötti tesztcsomagot kidolgozni (egyébként van ilyen), szóval senki ne vonjon le messze menő következtetéseket :)

Tovább…

14dec.
6

Django munkamenet kezelés

A munkameneteket kezelő keretrendszer (session framework) lehetőséget ad arra, hogy tetszőleges információkat tároljunk egy adott munkamenetben (session-ben). A rendszer az adatokat - a kliens oldali sütik helyet - szerever oldalon tárolja az adatbázis egy táblájában (django_session). A sütik csak a munkamenet azonosítóját tárolják (kódolt formátumban), ez védi meg az alkalmazást attól, hogy az adatokat kliens oldalon a felhasználók módosíthassák. Először is engedélyezzük a munkamenetek kezelését. A következő beállításokat kell tartalmaznia a settings.py állománynak:
  • A MIDDLEWARE_CLASSES résznél a következő bejegyzést: 'django.contrib.sessions.middleware.SessionMiddleware'
  • Az INSTALLED_APPS résznél a következő bejegyzést: 'django.contrib.sessions'
Ha ezt a két bejegyzést fölvettük, nem kell mást tennünk, mint szinkronizálni az adatbázist (manage.py syncdb). Mivel a munkamenet kezelés egy általános feladat szinte minden webes alkalmazás esetén, ezért a startproject parancs ezeket a beállításokat alapértelmezettként megcsinálja.
Ezek után minden HttpRequest objektum tartalmaz egy session attribútumot. Ezen attribútum értékeit ugyanúgy lehet kezelni, mint a szótár típusú változókat (kulcs-érték párok alapján):
# Munkamenet egy értékének beállítása:
request.session["fav_color"] = "blue"
# Értékadás egy változónak a munkamenet egy értéke alapján:
fav_color = request.session["fav_color"]
# Egy elem törlése a munkamenetből:
del request.session["fav_color"]
# Annak ellenőrzése, hogy a munkamenet tartalmaz-e
# egy bizonyos kulcs-érték párt:
if "fav_color" in request.session:
    ....
Ezen felül a session attribútum rendelkezik a keys() és az items() függvényekkel. Van néhány egyszerű szabály a munkamenetek adatainak kezelésével kapcsolatban:
  • A szótár kulcsai string típusú objekumok legyenek.
  • A Django keretrendszer is használ néhány szótár értéket. Ezeknek a kulcsai kivétel nélkül aláhúzással kezdődnek. Amíg nem vagyunk tisztában az összes "Django-s" szótárkulccsal, addig nem érdemes olyan kulcsokat használni saját bejegyzéseinknek, melyek aláhúzással kezdődnek.
  • Nem szabad a session objektumot bármilyen más objektumra cserélni, vagy annak attribútumait módosítani:
request.session = valami_mas_objektum # Helytelen használat!
request.session.foo = 'bar' # Helytelen használat!
Nézzünk egy egyszerű példát arra, hogy hogyan lehet megelőzni azt, hogy egy felhasználó egy poszthoz több megjegyzést is fűzzön egy látogatás alkalmával (azaz egy munkameneten belül):
def megjegyzest_kuld(request):
    if request.method != 'POST':
        raise Http404('....')
    if 'megjegyzes' not in request.POST:
        raise Http404('.....')
    if request.session.get('kuldott_korabban', False):
        return HttpResponse("Mar kommenteltel korabban.")
    # Megjegyzes elmentése
    request.session['kuldott_korabban'] = True
    return HttpResponse('Koszonom a megjegyzest!')
A Django munkamenet keretrendszer segítségével tehát lehetőséget teremtettünk arra, hogy adatokat tároljunk több HTTP lekérdezésen keresztül (perzisztencia). Ez az alapja (többek között) a felhasználói azonosításnak és jogosultság kezelésnek.

22nov.
4

django-annoying

A django-annoying az alkalmazásunkhoz illeszthető komponens, amely a Django keretrendszer szolgáltatásait bővíti ki vagy módosítja annak felületét annak érdekében, hogy megszűntesse a keretrendszer fájó pontjait. A django.shortcuts modullal maga a Django is számos ponton segíti a repetitív kódok mellőzését, de közel sem fedi le a problémák teljes körét.

A Django...

Tovább…

05nov.
0

Alkalmazás szintű konfiguráció

Ahogy azt már tudjuk, Djangonál a beállításokat a settings.py modulba illik tenni. Viszont mit tegyünk akkor, ha egy olyan alkalmazást (appot) szeretnénk készíteni, amit majd több más projektben is fel szeretnénk használni, esetleg közkinccsé is tesszük?

Ilyenkor persze az is megoldás, ha szépen leírjuk a dokumentációban, hogy milyen dolgokat állítson be az emberünk a settings.py-ben, és mi mit ajánlunk alapértelmezetten, vagy a kódunkban bárhol ahol szeretnénk használni ezeket a beállításokat, ott mindig ellenőrizzük, hogy be van-e állítva, és ha nincs, akkor az alapértelmezettet használjuk. De ezek nem túl szép megoldások.

Tovább…

26okt.
2

Django, egy példán keresztül III.

A modell

Egy MVC jellegű alkalmazás legfontosabb része a modell, a legelső dolog, amit meg kell terveznünk, el kell készítenünk. (Bár én a végére hagytam, vegyük észre, hogy eddig is volt modell a példában, mégpedig az utils.py modulon keresztül elért filerendszer.)

A modellünket természetesen nem írja meg helyettünk a django, de rendelkezik egy elég jó ORM-mel, segít a validációban, és ugye van egy automatikusan generált admin felülete, ahol végül is a modellünket piszkálhatjuk.

Tovább…

20okt.
1

Django, egy példán keresztül II.

View-k és template-ek

Djangoban a view-k felelnek meg nagyjából az MVC minta controllereinek. Tipikusan olyan függvények - vagy függvényként viselkedő objektumok -, amelyekhez hozzá van rendelve valamilyen URL-minta, és ha a felhasználó a böngészőjébe az adott mintának megfelelő URL-t ír be, akkor a view lefut, az általa visszaadott válasz (általában valami HttpResponse objektum) pedig a megfelelő formában visszajut a böngészőbe, és ott megjelenik a kívánt tartalom.

Tovább…

15okt.
7

Django, egy példán keresztül I.

Az alapok

Ahogy korábban már írtam, régebb óta tervezem valami tutorial szerűség megírását, hát végre eljutottam ide - kicsit lassabban, mint terveztem, az utóbbi időszak nem várt eseményei miatt. A teljes tutorial több cikket fog magába foglalni, ez az első rész a Django környezet kialakításáról fog szólni.

A folyamatot egy olyan példán keresztül szeretném bemutatni, amit később saját célra használni is fogok, néhány ponton ezért lehet, hogy nem a legegyszerűbb megoldásokat alkalmazom. A problémakört más irányból közelítem meg, mint a hivatalos Django tutorial, ezért azt sem árt átnézni, illetve csak ajánlani tudom a Django dokumentációját, ami szerintem kifejezetten jó.

Tovább…

14okt.
0