Принимать параметры только из POST-запроса в python - PullRequest
1 голос
/ 29 июня 2011

Есть ли способ принимать параметры только из POST-запроса?Если я использую cgi.FieldStorage () из модуля cgi, он принимает параметры как из запроса GET, так и из запроса POST.

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

По умолчанию большинство элементов в модуле cgi объединяются os.environ['QUERY_STRING'] и sys.stdin (в формате, предложенном os.environ['CONTENT_TYPE']). Таким образом, простым решением было бы изменить os.environ или, скорее, предоставить альтернативу без строки запроса.

# make a COPY of the environment
environ = dict(os.environ)
# remove the query string from it
del environ['QUERY_STRING']
# parse the environment
form = cgi.FieldStorage(environ=environ)
# form contains no arguments from the query string!

Игнасио Васкес-Абрамс предлагает вообще отказаться от модуля cgi; современные веб-приложения на python обычно должны соответствовать интерфейсу WSGI . Вместо этого это может выглядеть так:

import webob
def application(environ, start_response):
    req = webob.Request(environ)
    if req.method == 'POST':
        # do something with req.POST

# still a CGI application:
if __name__ == '__main__':
    import wsgiref.handlers
    wsgiref.handlers.CGIHandler().run(application)
0 голосов
/ 29 июня 2011

Из документации, я думаю, вы можете сделать следующее:

form = cgi.FieldStorage()
if isinstance(form["key"], cgi.FieldStorage):
     pass #handle field

Этот код не проверен.

...