programing

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

powerit 2023. 7. 22. 10:28
반응형

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

PHP에서는 그냥 사용할 수 있습니다.$_POSTPOST 및$_GETGET(쿼리 문자열) 변수의 경우.파이썬에서 이에 해당하는 것은 무엇입니까?

HTML 양식을 다음과 같이 게시한다고 가정합니다.

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

원시 cgi를 사용하는 경우:

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

Django, Pylon, Flask 또는 Pyramid를 사용하는 경우:

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

터보 기어 사용, 체리피:

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엔진:

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

그래서 여러분은 정말로 그 틀들 중 하나를 선택해야 할 것입니다.

이것이 오래된 질문이라는 것을 압니다.하지만 좋은 대답이 없었다는 것은 놀라운 일입니다.

우선, 그 질문은 틀에 대한 언급 없이 완전히 유효합니다.CONTEXE는 PHP 언어 등가입니다.Python에서 쿼리 문자열 매개 변수를 가져오는 방법은 여러 가지가 있지만 프레임워크 변수는 편리하게 채워집니다.PHP에서,$_GET그리고.$_POST편의 변수이기도 합니다.각각 QUERY_URI 및 php://input에서 구문 분석됩니다.

파이썬에서, 이러한 함수들은os.getenv('QUERY_STRING')그리고.sys.stdin.read()OS 및 시스템 모듈을 가져오는 것을 잊지 마십시오.

여기서 "CGI"라는 단어는 특히 웹 서버와 인터페이스할 때 두 언어와 그 공통점에 대해 말할 때 주의해야 합니다. 1. CGI는 HTTP 프로토콜에서 데이터 전송 메커니즘을 정의합니다. 2. Python은 Apache. 3에서 CGI 스크립트로 실행되도록 구성할 수 있습니다.Python의 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 데이터를 맹목적으로 확인하기 때문에 Null 포인터 예외가 발생합니다.

나는 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 에 접속할 수 없습니다.하지만 이 쪽지는 우편물에 있습니다.python.org 에서 첫 번째 포인터를 제공합니다.자세한 내용은 CGI 및 URLLIB Python 라이브러리를 참조하십시오.

갱신하다

좋아요, 링크가 끊겼어요기본적인 wsgiref는 다음과 같습니다.

Python은 언어일 뿐이며 GET 및 POST 데이터를 얻으려면 Python으로 작성된 웹 프레임워크 또는 툴킷이 필요합니다.장고는 Charlie가 지적했듯이 cgi와 urllib 표준 모듈이 다른 모듈입니다.또한 Turbogears, Pylons, CherryPy, web.py , mod_build, fastcgi 등을 이용할 수 있습니다.

장고에서, 당신의 보기 함수는 요청을 가진 요청 인수를 받습니다.GET하고 요청합니다.POST. 다른 프레임워크에서는 다르게 수행됩니다.

언급URL : https://stackoverflow.com/questions/464040/how-are-post-and-get-variables-handled-in-python

반응형