No se pueden obtener los parámetros POST

Estoy desarrollando una aplicación web en Python utilizando WebApp2 como marco. No puedo obtener los parámetros de solicitud HTTP POST enviados rellenando un formulario.

Ese es el código HTML del formulario que creé.

  Normal Login Page     eMail: 
password:

Ese es el resultado de la solicitud POST después de presionar el botón enviar

 POST /loginN/ HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4 Cache-Control: max-age=0 Content-Length: 33 Content-Type: text/plain Content_Length: 33 Content_Type: text/plain Cookie: session=############ Host: ########### Origin: ########### Referer: ############ Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 X-Appengine-City: ####### X-Appengine-Citylatlong: ######## X-Appengine-Country: ## X-Appengine-Region: ## X-Cloud-Trace-Context: ## eMail=mymail@email.com pwd=mypwd 

Ese es el código del controlador de solicitud POST

 class loginN(BaseHandler): def post(self): w = self.response.write self.response.headers['Content-Type'] = 'text/html' logging.info(self.request) logging.info(self.request.POST.get('eMail')) logging.info(self.request.POST.get('pwd')) email = self.request.POST.get('eMail') pwd = self.request.POST.get('pwd') w('') w('') w('Data Page ') w('') w('

Welcome! Your mail is: %s

' % email) w('

Your pwd is: %s

' % pwd) w('')

BaseHandler es webapp2.RequestHandler extendido para manejar sesiones (también probé con webapp2.RequestHandler y obtuve los mismos resultados).

Lo que obtengo cada vez es Ninguno para ambos parámetros.

¿Alguna sugerencia sobre cómo resolver el problema? También probé self.request.get, en su lugar self.request.POST.get, pero no funcionó también (no obtuve Ninguno tampoco)

Intente eliminar el enctype="text/plain" del formulario y luego use self.request.POST.get('eMail') y self.request.POST.get('pwd') .

Edición: la razón por la cual la eliminación de enctype="text/plain" funciona es porque desea que enctype sea "text/html" (que es el valor predeterminado) para que webapp2 lea el formulario como un formulario html. Cuando se configura simplemente en "text/plain" , la salida del formulario está contenida en el cuerpo de la solicitud como texto, que es lo que vio cuando imprimió la solicitud. Si usa "text/plain" , entonces podría acceder a la salida del formulario como una cadena usando:

 form_string = str(self.request.body) 

y luego podrías analizar esa cadena para obtener los pares clave-valor. Sin embargo, como ya sabe, es más fácil simplemente configurar el enctype en html para obtener la funcionalidad estándar de http.

No pude encontrar específicamente información de enctype en la documentación, pero si tiene otras preguntas sobre el objeto de solicitud, sugiero leer la documentación de Webob para un objeto de solicitud. Webapp2 utiliza solicitudes de Webob, de modo que la documentación es el lugar al que debe ir para comprender su solicitud.