Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Django: Zpracovávání formulářů

Honza Kral
Honza Kral (neregistrovaný) ---.chservices.cz
2. 10. 2009 13:36 Nový

unicode a prace se stringy

celé vlákno

Prosim vyhnete se pouzivanim bytestringu (str()) v djangu, zejmena v kombinaci s unicode stringy. Vede to k osklivym errorum ktere jsou tezko odhalitelne protoze se vyskytuji jen nekdy, vsude pouzivejte unicode.

Rovnez opetovne scitani stringu (byte i unicode) je vhodne se vyhnout, je to neumerne draha operace:

out = [message]
for item in ['name', 'email', 'phone', 'reaction', 'text']:
  if unicode(form.cleaned_data[item]):
    out.extend([form[item].label, u': ', unicode(form.cleaned_data[item]), u'\n'])
message = ''.join(out)

Nehlede na to, ze pokud mym zamerem je jen odeslat data v emailu, neni vhodne pozadovat po Djangu aby vstupy z formulare prevadelo na datove typy pythonu (Boolean) jen proto abych je pak prevedl zpet, ChoiceField by v tomto pripade vyhovoval mnohem vic a usetril by dost kodu (vsechny prevody na unicode v zobrazenem view).

Pavel Dvořák
2. 10. 2009 13:50 Nový

Re: unicode a prace se stringy

celé vlákno

Máte naprostou pravdu, všude by měla být použita metoda unicode, ne str. Omlouvám se za to, nestihl jsem kód dostatečně otestovat. (Hlavně že tam o tom píšu, že je na tom místě potřeba použít unicode řetězce…)

Tomaasch
Tomaasch (neregistrovaný) 84.244.101.---
2. 10. 2009 16:18 Nový

Obecnejsi kod

celé vlákno

Kod smycky pro vypis fieldu jde pouzit o neco obecneji, misto

    for item in ['name', 'email', 'phone', 'reaction', 'text']:

je IMHO lepsi pouzit ponekud obecnejsi

    for item in form.fields.keyOrder:

Pak muzeme vesele pridavat dalsi fieldy pouze do modelu a view pritom zustane netknute…

Pavel Dvořák
2. 10. 2009 17:25 Nový

Re: Obecnejsi kod

celé vlákno

Dobrý trik, díky.

Pavel Dvořák
4. 10. 2009 14:17 Nový

Oprava kódu sestavujícího e-mailovou zprávu

celé vlákno

Opravil jsem příklad podle komentářů Honzy Krále a Tomaashe. Nezahrnul jsem sice všechny připomínky (názornost je podle mě důležitější než efektivita), ale kód by teď měl být bez defektů. Ještě jednou díky oběma pozorným čtenářům.

Zasílat nově přidané příspěvky e-mailem