Entries tagged “django”

Django Girls Budapest

UPDATE május 16-án újra megrendezésre kerül az esemény!

Helló lányok!

Számomra nagyon szimpatikus kezdemenyezés a Django Girls, amely világszerte kifejezetten lányoknak tart Django oktatást - mert amellett, hogy nagy hiány van jó pythonos/djangós szakemberekből, lányokból mégnagyobb.

Idén először budapesti lányoknak is megnyílik a lehetőség, hogy egy ingyenes workshop keretein belül...

Tovább…

06ápr.
3

Változáskövetett modellek Djangoban

A django-reversion-ről írok. pip install django-reversion. Iskolapéldája a Djangohoz tapasztható az újrafelhasználható komponenseknek. Használatával a megjelölt modellek változásait rögzíthetjük, és állíthatjuk vissza tetszőleges korábbi állapotba.

blogpost = BlogPost.objects.get(slug='django-reversion')
version_list = Version.objects.get_for_object(blogpost).order_by('-pk') # összes objektumon végzett változás listája
version = version_list[0] # legutóbbi változat
version.revision.revert() # a revizióban lévő valamennyi verzió egyidejű visszaállítása

Tovább…

25máj.
0

GSoC 2011

A Django idén is bekerült a Google Summer of Code programjába, méghozzá négy hasznosnak tűnő, régóta várt projekttel:

  • a template motor alapjainak újratervezése

  • form renderelés átalakítása

  • schema migrációt elősegítő API

  • összetett elsődleges kulcsok támogatása

Eredeti bejelentés.

26ápr.
0

Djangos munkalehetőségek

Az utóbbi időben megszaporodtak a postaládámban a "Djangos/Pythonos fejlesztőt keresünk" témájú levelek - aminek személy szerint nagyon örülök, de aki nem talál magának jó munkaerőt, illetve munkahelyzet, az kevésbé.

Első körben mindenkinek ajánlanám a Weblabor munka rovatát, de ha több helyen szeretnétek a hirdetést megjelentetni, akkor nyugodtan kommenteljétek ide ehhez a posthoz az ajánlatotokat, az érdeklődők pedig feliratkozhatnak a post rssére, hogy minél gyorsabban értesüljenek, ha bejön valami új dolog.

Pythonra fel!

Tovább…

22febr.
8

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

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