【问题标题】:Python POST JSON - Is a web framework required?Python POST JSON - 是否需要 Web 框架?
【发布时间】:2014-10-11 00:36:26
【问题描述】:

我对 python 有点陌生,并试图理解一个简单的 JSON POST 示例(我正在使用 AngularJS)。我已经阅读了其他关于 SO 的 Q 并且我看到大多数人使用某种类型的框架(即,cherrypy)。

我能够通过 POST 发送数据(字符串),并且在成功后,将其显示在一个简单的警报中。但前提是我将字符串包装在 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()

有没有办法让这个简单的例子在不安装框架的情况下工作?

【问题讨论】:

    标签: javascript python json angularjs


    【解决方案1】:

    简单的答案是“不”。框架只是某人编写的一些代码,用于做一些常见的事情——例如。设置 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"
    

    【讨论】:

    • 在发布我的问题后,我在另一个 SO 问题中遇到了print "Content-type:text/json\r\n\r\n"。看起来很有希望的 500 错误已经消失,看起来 JSON 数据正在返回客户端 - 但我仍有一些故障排除工作要做。
    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2015-12-21
    • 1970-01-01
    相关资源
    最近更新 更多