WSGIREF를 사용하여 게시물을 잡는 방법
문제
간단한 형태에서 게시물 데이터를 포착하려고합니다.
WSGIREF와 함께 연주하는 것은 이번이 처음이며 올바른 방법을 찾을 수없는 것 같습니다.
This is the form:
<form action="test" method="POST">
<input type="text" name="name">
<input type="submit"></form>
그리고 게시물을 잡을 수있는 올바른 정보가 분명히 누락 된 기능 :
def app(environ, start_response):
"""starts the response for the webserver"""
path = environ[ 'PATH_INFO']
method = environ['REQUEST_METHOD']
if method == 'POST':
if path.startswith('/test'):
start_response('200 OK',[('Content-type', 'text/html')])
return "POST info would go here %s" % post_info
else:
start_response('200 OK', [('Content-type', 'text/html')])
return form()
해결책
서버에서 응답을 읽어야합니다.
에서 Nosklo의 대답 비슷한 문제에 : "PEP 333 말한다 Environ [ 'wsgi.input']을 읽어야합니다.."
테스트 된 코드 (적응 이 답변):
경고 :이 코드는 시연 목적으로 만 사용됩니다.
경고 : 하드 코딩 경로 나 파일 이름을 피하십시오.
def app(environ, start_response):
path = environ['PATH_INFO']
method = environ['REQUEST_METHOD']
if method == 'POST':
if path.startswith('/test'):
try:
request_body_size = int(environ['CONTENT_LENGTH'])
request_body = environ['wsgi.input'].read(request_body_size)
except (TypeError, ValueError):
request_body = "0"
try:
response_body = str(request_body)
except:
response_body = "error"
status = '200 OK'
headers = [('Content-type', 'text/plain')]
start_response(status, headers)
return [response_body]
else:
response_body = open('test.html').read()
status = '200 OK'
headers = [('Content-type', 'text/html'),
('Content-Length', str(len(response_body)))]
start_response(status, headers)
return [response_body]
제휴하지 않습니다 StackOverflow