Formulář je uvozen párovou značkou <FORM>, která musí mít minimálně dva atributy: ACTION a METHOD. Atribut ACTION určuje cgi program, kterému budou předány informace z formuláře ke spracování. Atribut METHOD určuje, jakým způsobem budou data serveru odeslána. Možnosti jsou dvě: GET a POST. Metoda GET uloží data z formuláře do QUERY_STRINGu (budeme probírat později), metoda POST předá data z formuláře programu jako standardní vstup. (Metoda POST se hodí především pro přenášení velkého oběmu dat.) Prázdný formulář tedy může vypadat nějak takto:
Prázdný formulář je ovšem k ničemu. Aby jej bylo možno použít, musí obsahovat tlačítko SUBMIT. Prvky formuláře IMPUT mají nejméně jeden atrubut - TYPE, který určuje o jaký prvek se jedná. Mohou následovat některé atributy prvku. Nebudu se zdržovat jejich popisem, na internetu najdete příkladů výc než dost. Ukážu zde jen jeden příklad - TEXT. Prvek TEXT má atribut NAME, pomocí kterého může cgi program identifikovat, který text pochází z kterého vstupního pole.<FORM ACTION="http://localhost/cgi-bin/pokus.cgi" METHOD=GET> </FORM>
<FORM ACTION="http://localhost/cgi-bin/pokus.cgi" METHOD=GET> Jmeno:<br><INPUT TYPE="TEXT" NAME="jmeno"><br> Prijmeni:<br><INPUT TYPE="TEXT" NAME="prijmeni"><br> <INPUT TYPE="SUBMIT"> </FORM>
| Vytvořte si html stránku s tímto formulářem. Uvidíte vstupní pole pro text a tlačítko submit. Po jeho stisknutí se spustí cgi program pokus.cgi (pokud existuje), který jste vytvořili v minulé kapitole. |
jmeno=Pavel&prijmeni=Vom%E1%E8kaTedy jméno prvku formuláře (NAME), rovnítko a hodnotu prvku formuláře. Jednotlivé prvky formuláře QUERY_STRING odděluje znakem &. Všimněte si, že národní znaky (jako á a č) jsou nahrazeny zvláštními značkami začínající procentem.
Budete-li chtít v cgi programu vytisknout QUERY_STRING, můžete to udělat takto:
#!/usr/bin/python
#
print 'Content-type: text/html\n' # '\n' je novy radek
# pouziva se pro ukonceni hlavicky
print '<html><body>'
import os
if os.environ.has_key('QUERY_STRING'):
print os.environ['QUERY_STRING']
print '</body></html>'
Všimněte si, že pokud použijete ve formuláři pro odeslání dat
metodu GET, URL adresa, na kterou se Váš prohlížeč pokouší
přihlásit je ve tvaru
http://localhost/cgi-bin/pokus.cgi?jmeno=Pavel&prijmeni=Vom%E1%E8kaTedy: URL cgi programu, otazník a QUERY_STRING. Hádejte co se stane, když do adresy svého prohlížeče zadáte
http://localhost/cgi-bin/pokus.cgi?jmeno=Thomas+Alva&prijmeni=Edison.
>>> import cgi
>>> cgi.parse_qs('jmeno=Pavel&prijmeni=Vom%E\1%E8ka')
{'prijmeni': ['Vom%E\x01\xe8ka'], 'jmeno': ['Pavel']}
>>> qs = cgi.parse_qs('jmeno=Pavel&prijmeni=Vom%E\1%E8ka')
>>> print qs['prijmeni']
['Vom%E\x01\xe8ka']
>>> type (qs['prijmeni'])
<type 'list'>
V cgi programu by jste využili funkci parse_qs takto:
Pokud do formuláře zadáte do textového pole jmeno Thomas Alva a do pole prijmeni Edison, potom se vám vrátí řádky:#!/usr/bin/python # # pokus.cgi print 'Content-type: text/html; Charset="iso-8859-2"\n' print '<html><body>' import os,cgi QS = os.environ['QUERY_STRING'] qs = cgi.parse_qs(QS) print 'QS=',QS,'<br>qs=',qs,'<p>' print '</body></html>'
QS= jmeno=Thomas+Alva&prijmeni=Edison
qs= {'prijmeni': ['Edison'], 'jmeno': ['Thomas Alva']}
Návratovou hodnotou funkce FieldStorage() je objekt FieldStorage jehož prvky jsou objekty MiniFieldStorage. Vám však stačí znát jen metodu has_key() objektu FieldStorage a atribut value objektu MiniFieldStorage.
Upravte předchozí cgi program pokus.cgi následovně:
#!/usr/bin/python
#
# prvni cgi progarm v pythonu
print 'Content-type: text/html; Charset="iso-8859-2"\n'
print '<.phpl><body>'
import os,cgi
QS = os.environ['QUERY_STRING']
qs = cgi.parse_qs(QS)
print 'QS=',QS,'<br>qs=',qs,'<p>'
f = cgi.FieldStorage()
if f.has_key('jmeno') and f.has_key('prijmeni'):
print f['jmeno'].value,f['prijmeni'].value
else:
print 'Musite zadat jmeno i prijmeni'
print '</body></html>'
Pokud do formuláře zadáte do textového pole se
jménem jmeno text Mléčná a do pole se jménem
prijmeni text Výživa, uvidíte následující výstup:
QS= jmeno=Ml%E9%E8n%E1&prijmeni=V%FD%BEiva
qs= {'prijmeni': ['V\xfd\xbeiva'], 'jmeno': ['Ml\xe9\xe8n\xe1']}
Mléčná Výživa
Změníte-li metodu formuláře z metody GET na POST, uvidíte
následující:
QS=
qs= {}
Mléčná Výživa
Snad už není co dodávat.