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

StackOverflow https://stackoverflow.com/questions/464040

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

При использовании raw cgi :

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

Если используется Django , Pylons , Flask или Пирамида :

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

Использование турбогенераторов , 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

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

Другие советы

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

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 такими функциями будут os.getenv ('QUERY_STRING') и sys.stdin.read (). Не забудьте импортировать модули os и sys.

Мы должны быть осторожны со словом " CGI " здесь, особенно когда речь идет о двух языках и их общности при взаимодействии с веб-сервером. 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:

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 fieldstorage.

import cgi
form = cgi.FieldStorage()

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

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

Обновлять

Ладно, ссылка битая.Вот базовая ссылка на wsgi

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top