[python] POST에서 POST 및 GET 변수는 어떻게 처리됩니까?

PHP에서는 $_POSTPOST 및 $_GETGET (쿼리 문자열) 변수에 사용할 수 있습니다. 파이썬에서 동등한 것은 무엇입니까?



답변

다음과 같이 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

터보 기어 사용 , Cherrypy :

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

Web.py :

form = web.input()
print form.username

베르 체우 :

print request.form['username']

Cherrypy 또는 Turbogear를 사용하는 경우 매개 변수를 직접 사용하여 핸들러 함수를 정의 할 수도 있습니다.

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

따라서 실제로 이러한 프레임 워크 중 하나를 선택해야합니다.


답변

나는 이것이 오래된 질문이라는 것을 안다. 그러나 좋은 대답이 없었다는 것은 놀라운 일입니다.

우선 모든 질문은 프레임 워크를 언급하지 않고 완전히 유효합니다. 컨텍스트는 PHP 언어와 동일합니다. 파이썬에서 쿼리 문자열 매개 변수를 얻는 방법은 많이 있지만 프레임 워크 변수는 편리하게 채워집니다. PHP에서, $_GET그리고 $_POST편리 변수도 있습니다. 그것들은 각각 QUERY_URI와 php : // input에서 파싱됩니다.

파이썬에서 이러한 함수는 os.getenv('QUERY_STRING')and sys.stdin.read()입니다. os 및 sys 모듈을 가져와야합니다.

여기서는 특히 웹 서버와 인터페이스 할 때 두 언어와 공통점에 대해 이야기 할 때 “CGI”라는 단어에주의해야합니다. 1. 프로토콜 인 CGI는 HTTP 프로토콜에서 데이터 전송 메커니즘을 정의합니다. 2. Python은 Apache에서 CGI 스크립트로 실행되도록 구성 할 수 있습니다. 3. 파이썬의 CGI 모듈은 몇 가지 편리한 기능을 제공합니다.

HTTP 프로토콜은 언어와 무관하며 Apache의 CGI 확장도 언어와 무관하므로 GET 및 POST 매개 변수를 가져 오면 언어마다 구문 차이 만 있어야합니다.

다음은 GET 사전을 채우는 Python 루틴입니다.

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 요청이 GET 매개 변수를 전달할 수 있다는 사실을 무시하고 모듈이 POST 데이터를 맹목적으로 검사하기 때문에을 사용 하면 널 포인터 예외가 발생합니다.


답변

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


답변

CGI 필드 저장소 개체에 저장됩니다.

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으로 작성된 웹 프레임 워크 또는 툴킷이 필요합니다. Django는 Charlie가 지적했듯이 cgi 및 urllib 표준 모듈은 다른 모듈입니다. Turbogears, Pylons, CherryPy, web.py, mod_python, fastcgi 등도 사용할 수 있습니다.

Django에서 뷰 함수는 request.GET 및 request.POST가있는 요청 인수를받습니다. 다른 프레임 워크는 다르게 작동합니다.


답변