我对python有点陌生,试图理解一个简单的JSON POST示例(我正在使用AngularJS)。我已经阅读了其他关于SO的Q,我看到大多数人都使用某种类型的框架(例如,cherrypy)。
我能够通过POST发送数据(字符串),并在.success上将其显示在简单的警报中。但是只有当我将字符串包装在python代码本身的html标记中时。但是,当我从python脚本中取出HTML标记并尝试返回JSON对象时,出现500服务器错误。所以我的直觉告诉我,我必须使用Web框架吗?
失败的JSON尝试代码。
JS:
tableModule.factory('Service', ['$http',
function($http) {
return {
post : function($path, $data, callback) {
return $http.post($path, $data,{ headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} } ).success(callback);
}
...
Service.post('test.cgi', $.param($data), function(data, status){...
python非常简单:
import cgi
import cgitb
import sys
import traceback
import json
cgitb.enable()
def getData1():
...generate json data...
json_string = json.dumps(dictResult)
return json_string
if __name__ == "__main__":
try:
#htmlTop() <-- code not shown, when I wrap the python in html, i can return simple strings
getData1()
#htmlBottom()
except:
cgi.print_exception()
有没有一种方法可以使这个简单的示例在不安装框架的情况下工作?
简单回答是不”。框架只是由某人编写的一些代码,可以完成许多常见的事情,例如设置HTTP标头或处理cookie。无需使用框架,您可以编写自己的代码来执行这些操作。框架的优点是它们是由别人编写的(节省您的时间),并且往往在代码结构方面经过深思熟虑。
作为框架只是别人编写的代码的另一个示例,您可以在此处查看cherrypy的源代码:https ://bitbucket.org/cherrypy/cherrypy/src
关于您的示例,最好的查看位置是服务器的错误日志。https://docs.python.org/2/library/cgi.html#testing-your-cgi-script
我对CGI模块不是很熟悉,但是您不需要print输出并将其发送到客户端吗?getData1函数看起来像将json_string返回到主体,然后不执行任何操作-不打印。
您正在使用什么服务器?也许问题是这样的,它可以自动检测HTML的内容类型,但不能自动检测json,您需要在输出中指定该内容类型。
print "Content-type:text/json\r\n\r\n"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。