문제

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

여기에 요약하는 것은 조금 복잡합니다. 그래서 나는하지 않을 것입니다.

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