문제

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 요청 변수 (이후 섹션에 설명)를 포함해야하며 아래에 설명 된 규칙에 따라 지명 된 서버 별 확장 변수도 포함해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top