2009-04-22 7 views
1

J'essaie d'attraper les données POST à ​​partir d'un formulaire simple.Comment attraper le POST en utilisant WSGIREF

C'est la première fois que je joue avec WSGIREF et je n'arrive pas à trouver la bonne façon de procéder.

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

Et la fonction qui manque évidemment la bonne information pour attraper après:

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

Que se passe-t-il au lieu du comportement correct? Je viens de lancer cette application avec un 'serveur de pasteur rapide 'et tout semble fonctionner comme il se doit. – hao

Répondre

3

Vous devriez lire les réponses du serveur.

De nosklo's answer à un problème similaire: "PEP 333 dit you must read environ['wsgi.input']."

code testé (adapté de this answer):
        Avertissement: Ce code est à des fins de démonstration seulement.
        Avertissement: Essayez d'éviter les chemins ou les noms de fichiers codés en dur.

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

Merci, c'était exactement ce dont j'avais besoin! Une modification cependant consistait à ajouter [5:] à response_body pour éviter la partie 'size ='. – alfredodeza

Questions connexes