免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5865 | 回复: 2
打印 上一主题 下一主题

cherrypy的接收post的json数据老不成功 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-28 08:28 |只看该作者 |倒序浏览
本帖最后由 redflowflag 于 2013-01-28 08:31 编辑

这两天在学习cherrypy的时候,发现jquery提交的json数据,到了cherrypy就直接提示错误了。
jquery代码如下:
  1.        
  2. <script language="javascript">
  3.         $(function(){
  4.                 $("#mainfunc").click(function(){
  5.                   $.ajax({
  6.                            type:"post",
  7.                            url: "/doLogin",
  8.                            data:"{'user':'test'}",
  9.                            dataType:"json",  
  10.                            success: processData
  11.                             })
  12.                 })

  13.         })
  14.     function processData(returnData)    {
  15.               alert(returnData.status);   
  16.      }
  17. </script>
复制代码
python代码如下:

  1. import cherrypyimport os.pathimport jinja2
  2. #from jinja2 import  Environment, FileSystemLoader
  3. env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates'))
  4. class PiMes:
  5.     @cherrypy.expose
  6.     def index(self):
  7.         tmpl = env.get_template('index.html')
  8.         return tmpl.render()
  9.     @cherrypy.expose
  10.     @cherrypy.tools.json_in(force=False)
  11.     def doLogin(self):
  12.         da = cherrypy.request.json
  13.         return "any thing"

  14. def main():
  15.     current_dir = os.path.dirname(os.path.abspath(__file__))
  16.     conf = {
  17.             '/static': {'tools.staticdir.on':True, "tools.staticdir.dir": os.path.join(current_dir,"static")}
  18.              }
  19.     cherrypy.quickstart(PiMes(),"/", config=conf)

  20. if __name__ == "__main__":
  21.     main()
复制代码
但是每次一提交就报错:

  1. 400 Bad Request

  2. Unexpected body parameters: {'user':'test'}

  3. Traceback (most recent call last):
  4.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\_cpdispatch.py", line 34, in __call__
  5.     return self.callable(*self.args, **self.kwargs)
  6. TypeError: doLogin() got an unexpected keyword argument '{'user':'test'}'

  7. During handling of the above exception, another exception occurred:

  8. Traceback (most recent call last):
  9.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\_cprequest.py", line 656, in respond
  10.     response.body = self.handler()
  11.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\lib\encoding.py", line 188, in __call__
  12.     self.body = self.oldhandler(*args, **kwargs)
  13.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\_cpdispatch.py", line 40, in __call__
  14.     raise sys.exc_info()[1]
  15.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\_cpdispatch.py", line 38, in __call__
  16.     test_callable_spec(self.callable, self.args, self.kwargs)
  17.   File "c:\Python32\lib\site-packages\cherrypy-3.2.2-py3.2.egg\cherrypy\_cpdispatch.py", line 172, in test_callable_spec
  18.     raise cherrypy.HTTPError(400, message=message)
  19. cherrypy._cperror.HTTPError: (400, "Unexpected body parameters: {'user':'test'}")

复制代码
使用环境 :python 3.2+cherrypy 3.2.2




论坛徽章:
0
2 [报告]
发表于 2013-01-30 14:59 |只看该作者
本帖最后由 crifan 于 2013-01-30 15:01 编辑

原因应该是,你的json字符串,格式写错了。
把单引号改为双引号:
  1. {"user":"test"}
复制代码
应该就可以了。

相关总结:
【整理】什么是JSON+如何处理JSON字符串

之前遇到类似的,由于单引号导致的错误:
【已解决】Python中使用json.loads解码字符串时出错:ValueError: Expecting property name: line 1 column 1 (char 1)

其他还有些,也算有点变态的是:
【已解决】Python中用json.loads解码字符串出错:ValueError: No JSON object could be decoded

论坛徽章:
0
3 [报告]
发表于 2013-02-01 21:40 |只看该作者
双引号也是不行。

cherrypy._cperror.HTTPError: (400, 'Unexpected body parameters: {"user":"test"}')
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP