Вопрос

Я пытаюсь получить данные POST из простой формы.

Это первый раз, когда я играю с WSGIREF, и, похоже, я не могу найти правильный способ сделать это.

This is the form:
<form action="test" method="POST">
<input type="text" name="name">
<input type="submit"></form>

И функция, которой явно не хватает нужной информации для перехвата post:

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()
Это было полезно?

Решение

Вы должны читать ответы с сервера.

От ответ носкло к аналогичной проблеме:"БОДРОСТЬ ДУХА 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]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top