software mac example python python-2.7 tornado

mac - tornado python git



Solicitud de tornado. (6)

Mi aplicación Tornado acepta datos POST a través de la solicitud del cuerpo http

En mi manejador puedo obtener la solicitud

def post(self): data = self.request.body

Los datos que estoy obteniendo están en el formato de (diccionario)

¿Hay alguna forma de recibir estos datos en forma de un diccionario de Python?

No quiero usar eval en el lado del servidor para convertir esta cadena a un diccionario de Python.


Como una alternativa a la respuesta de Eloim, Tornado proporciona tornado.escape para "Escape / inescaping HTML, JSON, URLs y otros". Usarlo debería darte exactamente lo que quieres:

data = tornado.escape.json_decode(self.request.body)


Creo que tuve un problema similar cuando estaba analizando solicitudes en Tornado. Intente usar el módulo urllib.unquote_plus:

import urllib try: import simplejson as json except ImportError: import json data = json.loads(urllib.unquote_plus(self.request.body))

Mi código tenía que estar preparado para los dos formatos diferentes de solicitud, así que hice algo como:

try: json.loads(self.request.body) except: json.loads(urllib.unquote_plus(self.request.body))



La mejor manera de analizar el cuerpo en tornado incorporado httputil
Buen trabajo con entrada múltiple (como casilla de verificación, tablas, etc.). Si los elementos de envío tienen el mismo nombre en el diccionario, devuelve la lista de valores.

Muestra de trabajo

import tornado.httputil def post(self): file_dic = {} arg_dic = {} tornado.httputil.parse_body_arguments(''application/x-www-form-urlencoded'', self.request.body, arg_dic, file_dic) print(arg_dic, file_dic) # or other code`


Si está utilizando WebApp2, utiliza sus propios extras json. (Decodificar) http://webapp2.readthedocs.io/en/latest/_modules/webapp2_extras/json.html

data = json.decode(self.request.body) v = data.get(key) self.response.write(v)

Por ejemplo, mi clave de entrada es ''postvalor''

data = json.decode(self.request.body) v = data.get(''postvalue'') self.response.write(v)


qué tal si

bind_args = dict((k,v[-1] ) for k, v in self.request.arguments.items())