В PHP вы можете просто использовать переменные $_POST
POST и $_GET
GET (строка запроса). Что эквивалентно в Python?
В 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 или 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
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 cgi
, не так ли print form["username"].value
?
Bottle
что, по моему мнению, использует wsgi
, может кто-нибудь опубликовать эквивалент для использования в этом сценарии? Приведенный выше ответ является самым ясным объяснением, с которым я столкнулся, просто он не включает мой сценарий.
Я знаю, что это старый вопрос. И все же удивительно, что не было дано хорошего ответа.
Прежде всего, вопрос полностью актуален без упоминания основы. КОНТЕКСТ - это эквивалентность языка 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.
AttributeError: 'NoneType' object has no attribute 'split'
использование CGI
с Python
2.7
POST.get('user_name', 'default_value')
.
Я нашел ответ Носкло очень обширным и полезным! Для тех, кто, как и я, может найти доступ к необработанным данным запроса напрямую также полезным, я хотел бы добавить способ сделать это:
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()
http://www.myserver.com/cgi-bin/cgi.py/ThisIsMyMethod
. os.environ.get('PATH_INFO')
Связаны следующие переменные среды: которые получают имя метода (например: / ThisIsMyMethod) и os.environ.get('SCRIPT_NAME')
которые предоставляют путь к сценарию из корневой папки веб-хоста (например, /cgi-bin/cgi.py). В моем случае QUERY_STRING пуст, так как я использую POST.
Они хранятся в объекте CGI fieldstorage.
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
Это в некоторой степени зависит от того, что вы используете в качестве CGI-фреймворка, но они доступны в словарях, доступных для программы. Я бы указал на документы, но сейчас я не перехожу на python.org. Но эта заметка на mail.python.org даст вам первый указатель . Посмотрите на библиотеки CGI и URLLIB Python, чтобы узнать больше.
Обновить
Хорошо, эта ссылка разорена. Вот основной wsgi ref
Python - это всего лишь язык, для получения данных GET и POST вам нужен веб-фреймворк или инструментарий, написанный на Python. Джанго - один, как указывает Чарли, стандартные модули cgi и urllib - другие. Также доступны Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi и т. Д. И т. Д.
В Django ваши функции представления получают аргумент запроса, который имеет request.GET и request.POST. Другие рамки будут делать это по-другому.