Как обрабатываются переменные POST и GET в Python?

в PHP вы можете просто использовать $_POST для POST и $_GET для переменных GET (строка запроса). Что эквивалентно в Python?

6 ответов


предположим, вы публикуете html-форму с этим:

<input type="text" name="username">

при использовании сырой cgi:

import cgi
form = cgi.FieldStorage()
print form["username"]

при использовании Джанго, пилонов, колбы или пирамиды:

print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method

используя Turbogears, Cherrypy:

from cherrypy import request
print request.params['username']

Web.py:

form = web.input()
print form.username

Werkzeug:

print request.form['username']

при использовании Cherrypy или Turbogears, вы также можете определить свою функцию обработчика, принимая параметр напрямую:

def index(self, username):
    print username

Google App Engine:

class SomeHandler(webapp2.RequestHandler):
    def post(self):
        name = self.request.get('username') # this will get the value from the field named username
        self.response.write(name) # this will write on the document

так что вам действительно придется выбрать один из этих фреймворков.


они хранятся в объекте CGI fieldstorage.

import cgi
form = cgi.FieldStorage()

print "The user entered %s" % form.getvalue("uservalue")

Я нашел ответ носкло очень обширным и полезным! Для тех, кто, как и я, может найти доступ к данным raw-запроса непосредственно также полезным, я хотел бы добавить способ сделать это:

import os, sys

# the query string, which contains the raw GET data
# (For example, for http://example.com/myscript.py?a=b&c=d&e
# this is "a=b&c=d&e")
os.getenv("QUERY_STRING")

# the raw POST data
sys.stdin.read()

Я знаю, это старый вопрос. И все же удивительно, что не было дано хорошего ответа.

прежде всего, вопрос полностью действителен без упоминания структуры. Контекст-эквивалентность языка PHP. Хотя есть много способов получить параметры строки запроса в Python, переменные фреймворка просто удобно заполнены. В PHP $_GET и $_POST также являются переменными удобства. Они анализируются из QUERY_URI и php: / / input соответственно.

в Python, эти функции будут ОС.getenv ('QUERY_STRING') и sys.стандартный ввод.читать.)( Не забудьте импортировать модули os и sys.

мы должны быть осторожны со словом "ЦГИ", особенно когда речь идет о двух языках и их общность при взаимодействии с веб-сервером. 1. CGI, как протокол, определяет механизм передачи данных в протоколе HTTP. 2. Python можно настроить для работы в качестве CGI-скрипта в Apache. 3. Модуль cgi в Python предлагает некоторые функции удобства.

поскольку протокол HTTP не зависит от языка, а расширение CGI Apache также не зависит от языка, получение параметров GET и POST должно содержать только синтаксические различия между языками.

вот процедура Python для заполнения словаря GET:

GET={}
args=os.getenv("QUERY_STRING").split('&')

for arg in args: 
    t=arg.split('=')
    if len(t)>1: k,v=arg.split('='); GET[k]=v

и после:

POST={}
args=sys.stdin.read().split('&')

for arg in args: 
    t=arg.split('=')
    if len(t)>1: k, v=arg.split('='); POST[k]=v

теперь вы можете получить доступ к полям следующим образом:

print GET.get('user_id')
print POST.get('user_name')

Я должен также отметить, что модуль CGI не работает. Рассмотрим этот HTTP-запрос:

POST / test.py?user_id=6

user_name=Bob&age=30

использование cgi.FieldStorage().getvalue ('user_id') вызовет исключение нулевого указателя, потому что модуль слепо проверяет данные POST, игнорируя тот факт, что запрос POST также может нести параметры GET.


Это несколько зависит от того, что вы используете в качестве платформы CGI, но они доступны в словарях, доступных для программы. Я бы указал вам на документы, но я не достучался до python.org прямо сейчас. Но!--1-->это примечание на mail.python.org даст вам первый указатель. Посмотрите на CGI и urllib Python libs для большего.

обновление

ладно, связь оборвалась. Вот базовый WSGI ref


Python-это только язык, чтобы получить и опубликовать данные, вам нужна веб-платформа или инструментарий, написанный на Python. Django-это один, как указывает Чарли, стандартные модули cgi и urllib-это другие. Также имеющиеся Turbogears, пилоны, CherryPy, web.py, mod_python, fastcgi и т. д.

в Django ваши функции просмотра получают аргумент запроса, который имеет запрос.Получить и запросить.ДОЛЖНОСТЬ. Другие структуры сделают это по-другому.