Why is CGI module so complicated?
Magnus L. Hetland
mlh at idt.ntnu.no
Thu Aug 12 16:02:59 CEST 1999
Ian Clarke <I.Clarke at strs.co.uk> writes:
> > : Can anyone explain what the point of the FieldStorage and
> > : MiniFieldStorage objects are?
> How about go with
> the method I described in my first post (where cgi fields are returned
> as the types that they actually are, rather than being encased in
> MiniFieldStorage objects). Were more than one item is selected for a
> given field a list could be returned, and for a file upload a tuple
> could be returned containing the filename and the contents of the file -
> or if that is not considered extendable enough, a CGIFileUpload object
> could be returned containing the necessary fields.
Or just a File object... And then we could add a "name" attribute or
something to them... (Which would be empty in cases where the object
is not taken from a standard named file)... :)
> This would mean that for the vast majority of CGI fields which are just
> normal text, retrieval is very straight-forward and intuitive, just like
> accessing strings stored in a dictionary. More complexity is only
> introduced when the user wants to do more complicated stuff (and even
> then, it is pretty simple). As mentioned in my previous post, it would
> also allow the fields to be used as the substitutions for a
> TemplateDocument directly, which can be quite a useful trick.
Or - you could rewrite TemplateDocument to work with the CGI
classes... That would just be a matter of adding some code to
recognize whether it was a standard dictionary or not...
> If I get some spare time today I will create a small module which will
> provide this interface to CGI (although if anyone else wants to do it,
> feel free!). It would obviously be better if (assuming I can convince
> others that this is a better way) this was integrated into the built-in
> cgi module.
Well... I suspect it can be *very* small for simple applications (that
don't use file upload, the methods values() or items())...
----- simplecgi.py -----
import cgi, UserDict
self.data = cgi.FieldStorage()
def __getitem__(self, key): return self.data[key].value
Or you *could* use the old classes, like FormContentDict that are
already defined (but deprecated).
Magnus Making no sound / Yet smouldering with passion
Lie The firefly is still sadder / Than the moaning insect
Hetland : Minamoto Shigeyuki
More information about the Python-list