Я знаю, что это старый вопрос. И все же удивительно, что не было дано хорошего ответа.
Прежде всего, вопрос полностью актуален без упоминания фреймворка. КОНТЕКСТ - это эквивалентность языка 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.