문제
WSGI를 사용하여 우편 데이터에 액세스하는 방법을 알 수없는 것 같습니다. wsgi.org 웹 사이트에서 예제를 시도했지만 작동하지 않았습니다. 지금 Python 3.0을 사용하고 있습니다. WSGI 프레임 워크를 추천하지 마십시오.
필드 스토리지 개체에 넣는 방법을 알아 내고 싶습니다.
해결책
Post 데이터 만 FieldStorage 객체로 가져 오려고한다고 가정합니다.
# env is the environment handed to you by the WSGI server.
# I am removing the query string from the env before passing it to the
# FieldStorage so we only have POST data in there.
post_env = env.copy()
post_env['QUERY_STRING'] = ''
post = cgi.FieldStorage(
fp=env['wsgi.input'],
environ=post_env,
keep_blank_values=True
)
다른 팁
body= '' # b'' for consistency on Python 3.0
try:
length= int(environ.get('CONTENT_LENGTH', '0'))
except ValueError:
length= 0
if length!=0:
body= environ['wsgi.input'].read(length)
WSGI는 Python 3.0에 대해서는 아직 완전히 구체화되지 않았으며, 인기있는 WSGI 인프라의 대부분은 변환되지 않았거나 2To3D이지만 제대로 테스트되지 않았습니다). (wsgiref.simple_server도 실행되지 않습니다.) 오늘 3.0에 WSGI를하는 거친 시간을 보내고 있습니다.
이것은 나를 위해 효과가있었습니다 (Python 3.0) :
import urllib.parse
post_input = urllib.parse.parse_qs(environ['wsgi.input'].readline().decode(),True)
더 짧습니다
l = int(env.get('CONTENT_LENGTH')) if env.get('CONTENT_LENGTH') else 0
body = env['wsgi.input'].read(l) if l > 0 else ''
이 코드는 프로덕션에서 작동합니다.
예를 들어 일부 프레임 워크가 어떻게하는지 살펴 보는 것이 좋습니다. (나는 단지 하나를 추천하지 않고 예를 들어 사용합니다.)
다음은 코드입니다 Werkzeug:
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/wrappers.py#l150
어떤 전화
http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/utils.py#l1420
여기에 요약하는 것은 조금 복잡합니다. 그래서 나는하지 않을 것입니다.
제휴하지 않습니다 StackOverflow