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

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

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

4b9b3361

Ответ 1

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

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

Если вы используете raw cgi:

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

Если вы используете Django, Pylons, Flask или Pyramid:

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

Итак, вам действительно нужно будет выбрать одну из этих фреймворков.

Ответ 2

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

import cgi
form = cgi.FieldStorage()

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

Ответ 3

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

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()

Ответ 4

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

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

В Python эти функции будут os.getenv('QUERY_STRING') и sys.stdin.read(). Не забудьте импортировать модули os и sys.

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

Поскольку протокол HTTP не зависит от языка и что расширение Apache CGI также не зависит от языка, получение параметров 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:

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.

Ответ 5

В некоторой степени это зависит от того, что вы используете в качестве инфраструктуры CGI, но они доступны в словарях, доступных для программы. Я бы указал вам на документы, но сейчас я не добираюсь до python.org. Но эта заметка на mail.python.org даст вам первый указатель. Посмотрите на CGI и URLLIB Python libs для более.

Обновление

Хорошо, эта ссылка разоблачена. Здесь базовый wsgi ref

Ответ 6

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

В Django ваши функции просмотра получают аргумент запроса, который имеет request.GET и request.POST. Другие рамки будут делать это по-другому.