오류가 발생하는 이유, keyerror : 'wsgi.input'?
문제
WSGI를 사용하고 있으며이 코드를 사용하여 Get/Post 데이터에 액세스하려고합니다.
import os
import cgi
from traceback import format_exception
from sys import exc_info
def application(environ, start_response):
try:
f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
output = 'Test: %s' % f['test'].value
except:
output = ''.join(format_exception(*exc_info()))
status = '200 OK'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
그러나 다음 오류가 발생합니다.
Traceback (most recent call last):
File "/srv/www/vm/custom/gettest.wsgi", line 9, in application
f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
File "/usr/lib64/python2.4/UserDict.py", line 17, in __getitem__
def __getitem__(self, key): return self.data[key]
KeyError: 'wsgi.input'
wsgi.input이 내 버전에 존재하지 않기 때문입니까?
해결책
당신은 그것을 오용하고 있습니다 WSGI API.
이 오류를 표시하는 최소 ( "Hello World") 함수를 작성하여 코드에 주석 할 수 있습니다. [전체 응용 프로그램을 게시하지 마십시오. 우리가 언급하기에는 너무 크고 다루기 어려울 수 있습니다.
그만큼 os.environ
당신이 사용해야 할 것이 아닙니다. WSGI는 이것을 풍부한 환경으로 대체합니다. WSGI 응용 프로그램은 두 가지 인수를 얻습니다. 하나는 다음을 포함하는 사전입니다. 'wsgi.input'
.
코드에서 ...
def application(environ, start_response):
try:
f = cgi.FieldStorage(fp=os.environ['wsgi.input'], environ=os.environ)
WSGI API 사양에 따라 (http://www.python.org/dev/peps/pep-0333/#specification-details), 사용하지 마십시오 os.environ
. 사용 environ
, 응용 프로그램의 첫 번째 위치 매개 변수.
Environ 매개 변수는 CGI 스타일 환경 변수를 포함하는 사전 객체입니다. 이 객체는 내장 된 Python 사전 (서브 클래스, userDict 또는 기타 사전 에뮬레이션이 아님)이어야하며 응용 프로그램은 원하는 방식으로 사전을 수정할 수 있습니다. 사전에는 또한 특정 WSGI 요청 변수 (이후 섹션에 설명)를 포함해야하며 아래에 설명 된 규칙에 따라 지명 된 서버 별 확장 변수도 포함해야합니다.