Entries tagged “kezdő”

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, 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

Egy kis dekoráció

A python nyelvben a dekorátor egy "szintaktikai cukor" (szinte fáj az ilyet leírni magyarul), semmi újat nem ad a nyelvhez. A java annotációkhoz hasonló módon közvetlen a dekorálandó objektum elé helyezett, @ karakterrel kezdett kifejezés, amely például a klasszikus dekorátor tervezési minta használatához és sok más egyéb dologhoz jó. Lássuk hát mi is ez pontosan, illetve hogyan kell használni.

Tovább…

19aug.
9

Python és az OOP

Ahogy már írtam, a python egy objektum orientált scriptnyelv, de nem vagyunk rákényszerítve az OOP-re, nyugodtan használhatjuk imperatív/procedurális módon, azaz kb. mintha perl- vagy shellscriptet írnánk. Nem kell main() függvény (mint C-ben), nem kell egy kvázi felesleges osztály egy public static void main(...) metódussal, szépen sorról sorra megcsinálja, amit mondunk neki.

Pár soros scriptecskénél ez hasznos tulajdonság, nagyobb projectekben viszont kerülendő.

Csak címszavakban, mi is az az objektum orientált programozás?

Tovább…

07aug.
9

A Python interpreter

Az egyik kedvenc dolgom a pythonban az az interpreter. Segítségével igen gyorsan ki lehet próbálni kódrészleteket, modulokat, sőt én számológépnek is azt szoktam használni - egy-két terminál mindig nyitva van nálam :)

Tovább…

03aug.
7

Helló Világ!

Hát üdvözlök mindenkit, oldalunk célja a Django keretrendszer, illetve maga a Python programozási nyelv népszerűsítése lenne - meglátjuk milyen sikerrel :)

Ha esetleg késztetést érzel magadban, hogy te is leírd pythonos/djangos tapasztalataidat, vagy bármit, aminek a témához köze, keress meg minket (pl. szólj hozzá ehhez a bejegyzéshez), és esetleg adunk hozzáférést az oldalhoz.

Tovább…

22júl.
0