|
Frédéric Jolliton
mod_python at frederic.jolliton.com
Sun Mar 12 06:59:25 EST 2006
Hi,
[I'm not sure if python-dev was more appropriate.]
Say I've the following case: I've a form with POST method, where
action is an URL with a query string.
Currently, with util.FieldStorage it's not possible to know which
values come from the query string and which values come from the POST
request.
So, here is a suggestion: What about adding a keyword 'from_method' to
util.FieldStorage.__init__, then use it as follow:
getFieldStorage = util.FieldStorage( from_method = 'GET' )
postFieldStorage = util.FieldStorage( from_method = 'POST' )
?
And, of course, let unchanged the current behavior if from_method is
not specified or set to None.
Here is a trivial patch to support this keyword, against 3.2.8:
--- mod_python-3.2.8.orig/lib/python/mod_python/util.py 2006-02-02 06:31:45.000000000 +0100
+++ mod_python-3.2.8/lib/python/mod_python/util.py 2006-03-12 12:35:10.000000000 +0100
@@ -91,7 +91,7 @@
class FieldStorage:
- def __init__(self, req, keep_blank_values=0, strict_parsing=0, file_callback=None, field_callback=None):
+ def __init__(self, req, keep_blank_values=0, strict_parsing=0, file_callback=None, field_callback=None, from_method=None):
#
# Whenever readline is called ALWAYS use the max size EVEN when not expecting a long line.
# - this helps protect against malformed content from exhausting memory.
@@ -100,7 +100,7 @@
self.list = []
# always process GET-style parameters
- if req.args:
+ if req.args and (from_method is None or from_method.upper() == "GET"):
pairs = parse_qsl(req.args, keep_blank_values)
for pair in pairs:
file = cStringIO.StringIO(pair[1])
@@ -109,6 +109,9 @@
if req.method != "POST":
return
+ if from_method is not None and from_method.upper() != "POST":
+ return
+
try:
clen = int(req.headers_in["content-length"])
except (KeyError, ValueError):
--
Frédéric Jolliton
|