Using the cgi module





11.2.2 Using the cgi module

















Python Library Reference




Previous: 11.2.1 Introduction
Up: 11.2 cgi
Next: 11.2.3 Old classes




11.2.2 Using the cgi module



Begin by writing "import cgi". Do not use "from cgi import
*" -- the module defines all sorts of names for its own use or for
backward compatibility that you don't want in your namespace.


It's best to use the FieldStorage class. The other classes
defined in this module are provided mostly for backward compatibility.
Instantiate it exactly once, without arguments. This reads the form
contents from standard input or the environment (depending on the
value of various environment variables set according to the CGI
standard). Since it may consume standard input, it should be
instantiated only once.


The FieldStorage instance can be indexed like a Python
dictionary, and also supports the standard dictionary methods
has_key() and keys().
Form fields containing empty strings are ignored
and do not appear in the dictionary; to keep such values, provide
the optional "keep_blank_values" argument when creating the
FieldStorage instance.


For instance, the following code (which assumes that the
Content-Type header and blank line have already been printed)
checks that the fields name and addr are both set to a
non-empty string:



form = cgi.FieldStorage()
form_ok = 0
if form.has_key("name") and form.has_key("addr"):
form_ok = 1
if not form_ok:
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
...further form processing here...



Here the fields, accessed through "form[key]", are
themselves instances of FieldStorage (or
MiniFieldStorage, depending on the form encoding).
The value attribute of the instance yields the string value
of the field. The getvalue() method returns this string value
directly; it also accepts an optional second argument as a default to
return if the requested key is not present.


If the submitted form data contains more than one field with the same
name, the object retrieved by "form[key]" is not a
FieldStorage or MiniFieldStorage
instance but a list of such instances. Similarly, in this situation,
"form.getvalue(key)" would return a list of strings.
If you expect this possibility
(i.e., when your HTML form contains multiple fields with the same
name), use the type() function to determine whether you
have a single instance or a list of instances. For example, here's
code that concatenates any number of username fields, separated by
commas:



value = form.getvalue("username", "")
if type(value) is type([]):
# Multiple username fields specified
usernames = ",".join(value)
else:
# Single or no username field specified
usernames = value



If a field represents an uploaded file, accessing the value via the
value attribute or the getvalue() method reads the
entire file in memory as a string. This may not be what you want.
You can test for an uploaded file by testing either the filename
attribute or the file attribute. You can then read the data at
leisure from the file attribute:



fileitem = form["userfile"]
if fileitem.file:
# It's an uploaded file; count lines
linecount = 0
while 1:
line = fileitem.file.readline()
if not line: break
linecount = linecount + 1



The file upload draft standard entertains the possibility of uploading
multiple files from one field (using a recursive
multipart/* encoding). When this occurs, the item will be
a dictionary-like FieldStorage item. This can be determined
by testing its type attribute, which should be
multipart/form-data (or perhaps another MIME type matching
multipart/*). In this case, it can be iterated over
recursively just like the top-level form object.


When a form is submitted in the ``old'' format (as the query string or
as a single data part of type
application/x-www-form-urlencoded), the items will actually
be instances of the class MiniFieldStorage. In this case, the
list, file, and filename attributes are
always None.








Python Library Reference




Previous: 11.2.1 Introduction
Up: 11.2 cgi
Next: 11.2.3 Old classes



See About this document... for information on suggesting changes.





Wyszukiwarka

Podobne podstrony:
Using the Siemens S65 Display
Using the EEPROM memory in AVR GCC
A ZVS PWM Inverter With Active Voltage Clamping Using the Reverse Recovery Energy of the Diodes
Functions in cgi module
estimating?fort using the wide band?lphi technique?C30635
Using the Templates
DUI0379C using the assembler
Using the Prefix Re answers
Barron Using the standard on objective measures for concert auditoria, ISO 3382, to give reliable
content management using the rational unified process?3AF83F
2001 10 Using the Gimp Plugin Tool Gimpressionist
using the rup for small projects expanding upon extreme programm?B73129
Linux IPCHAINS HOWTO Appendix Using the ipfwadm wrapper script
Linux Online Linux IPCHAINS HOWTO Appendix Using the ipfwadm wrapper script
ldap customizing the adldap module
Developing your STM32VLDISCOVERY application using the Atollic TrueSTUDIO
Using the Prefix Re
10 Amazing Routines Using The Dynamic Coins Gimmick

więcej podobnych podstron