猿问

tornado中requesthandler收到的json数据解析出错,请问如何解析post请求中的json格式数据

写了一个简单的tornado程序,目的接受脚本post的json数据,解析并response,返回json数据。
client脚本如下:
#-*-coding:utf-8-*-
importurllib
importurllib2
importjson
url='http://127.0.0.1:8888'
values={'user':'a','passwd':'b'}
jdata=json.dumps(values)
req=urllib2.Request(url)
req.add_data(jdata)
printreq.headers
response=urllib2.urlopen(req)
tornado程序如下:
#-*-coding:utf-8-*-
importtornado.ioloop
importtornado.web
importtornado.httpserver
fromtornado.optionsimportdefine,options
importjson
define("port",default=8888,help='runatest')
classMainHandler(tornado.web.RequestHandler):
defget(self):
info={'user':'leno'}
jinfo=json.dumps(info)
self.write(jinfo)
defpost(self,*args,**kwargs):
print'postmessage'
printself.request.remote_ip
printself.request.body_arguments
user=self.get_body_argument('user')
pw=self.get_body_argument('passwd')
printuser
jdata=json.loads(user)
printjdata
data=json.loads(jdata)
defset_default_headers(self):
self.set_header('Content-type','application/json;charset=utf-8')
application=tornado.web.Application([
(r"/",MainHandler),
])
if__name__=="__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
在get_body_argument处出错:Missingargumentuser,printself.request.body_arguments则显示{'{"passwd":"b","user":"a"}':['']}在client处却正常,请问如何解决?谢谢!
慕神8447489
浏览 431回答 2
2回答

慕姐8265434

如果你POST的时json数据,那么解析请求的body即可try:data=json.loads(self.request.body)exceptExcept,e:pass

扬帆大鱼

最后发现不能用get_argumentm,采用的是如下:fromtornado.escapeimportjson_decodedefpost(self,*args,**kwargs):print'postmessage'printself.request.remote_ipprintself.request.body_argumentsdata=json_decode(self.request.body)user=data['user']pw=data['passwd']printuser,pwjdata=json.dumps(data)printjdataself.write(jdata)开始看见别人ajax用get_argument,以为能直接解析json,被误导了。中间拿到request的body,自己解析后就行了,还是感谢rsj217的回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答