2009-04-22 11 views
1

Ich versuche, POST-Daten von einem einfachen Formular abzufangen.So fangen Sie POST mit WSGIREF

Dies ist das erste Mal, dass ich mit WSGIREF herumspiele und ich kann nicht den richtigen Weg finden, dies zu tun.

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

Und die Funktion, die offensichtlich die richtigen Informationen fehlen Beitrag zu fangen:

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() 
+0

Was passiert anstelle des richtigen Verhaltens? Ich habe gerade diese App mit einem schnellen "Paster-Server" ausgeführt und alles scheint zu funktionieren, wie es sollte. – hao

Antwort

3

sollten Sie lesen Antworten des Servers werden.

Von nosklo's answer zu einem ähnlichen Problem: "PEP 333 sagt you must read environ['wsgi.input']."

getesteten Code (angepasst von this answer):
        Caveat: Dieser Code ist nur für anschauliche Zwecke.         Warnung: Versuchen Sie, hart codierende Pfade oder Dateinamen zu vermeiden.

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] 
+0

Danke, das war genau das, was ich brauchte! Eine Modifikation war jedoch, [5:] zu response_body hinzuzufügen, um den 'size =' Teil zu vermeiden. – alfredodeza