CherryPy JSON vs Form POST

时间:2014-01-09 14:00:32

标签: python json forms post cherrypy

我有一个使用CherryPy框架在Python中开发的Web应用程序。它使用许多传统的HTML表单(使用x-www-form-urlencoded数据)。

我正在开发一个iOS应用程序,我希望与Web应用程序使用的同一数据库同步。要从iOS上传到数据库,我想使用HTTP POST方法在HTTP请求正文中上传JSON。

我尝试在我的Web应用程序中编写一个方法来处理上传的JSON数据。

如果我的cherrypy.config看起来像这样

cherrypy.config.update({
    'environment': 'production',
    'log.screen': False,
    'log.access_file': '/home/adamek/webapps/cocoa_foody/logs/access.log',
    'log.error_file': '/home/adamek/webapps/cocoa_foody/logs/error.log',
    'server.socket_host': '127.0.0.1',
    'server.socket_port': 15982,
    'tools.caching.on': False,
    'tools.encode.encoding': "utf-8",
    'tools.json_in.on': True,
})

我的JSON页面有效,但是我的其他Web应用程序的表单提交失败。

如果我将最后一行更改为'tools.json_in.on': False,我的旧表单页面再次起作用,但JSON POST页面失败(cherrypy.request.json为None)。

对JSON页面的请求在请求标头中有Content-Type: application/json

对其他表单页面的请求有'Content-Type:application / x-www-form-urlencoded “

有没有办法让一个CherryPy应用程序同时处理application / json和application / x-www-form-urlencoded,或者我需要有两个独立的CherryPy应用程序吗?

1 个答案:

答案 0 :(得分:3)

发现它!只需要将'tools.json_in.force': False,添加到配置中。

cherrypy.config.update({
'environment': 'production',
'log.screen': False,
'log.access_file': '/home/adamek/webapps/cocoa_foody/logs/access.log',
'log.error_file': '/home/adamek/webapps/cocoa_foody/logs/error.log',
'server.socket_host': '127.0.0.1',
'server.socket_port': 15982,
'tools.caching.on': False,
'tools.encode.encoding': "utf-8",
'tools.json_in.on': True,
'tools.json_in.force': False,
})