我有一个使用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应用程序吗?
答案 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,
})