【问题标题】:CherryPy JSON vs Form POSTCherryPy JSON 与表单 POST
【发布时间】:2014-01-28 03:04:00
【问题描述】:

我有一个使用 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 为无)。

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

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

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

【问题讨论】:

  • 它应该适用于单个应用程序,因此您需要对其进行调试。 “表单提交失败”是什么意思?
  • 这就是我所说的表单提交失败的意思 415 Unsupported Media Type Expected an entity of content type application/json, text/javascript

标签: python json forms post cherrypy


【解决方案1】:

找到了!只需将'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,
})

【讨论】:

  • 好发现,我没注意到 force 默认为真
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 2011-04-14
  • 2021-09-17
  • 1970-01-01
  • 2021-10-19
  • 2012-07-26
相关资源
最近更新 更多