发布JSON和python Flask - 使用Werkzeug调试器的任何技术?

时间:2012-03-16 17:13:39

标签: python debugging flask werkzeug

好吧,我正在使用我的项目的RESTful后端,并通过jquery提交数据。

我必须说werkzeug调试器非常适合调试,特别是当你像我这样可怕的python程序员时。您出于意图调查异常,并使用调试器呈现的html检查代码和变量。

但是,当您发送post请求而不是get时,如果在后端代码上抛出异常,当然浏览器将不会呈现响应文本。

我是否可以使用任何技术来呈现响应文本,考虑到它有javascript和所有内容?

我正在尝试不同的方法,例如尝试将响应文本注入弹出窗口,例如:

           $.postJSON = function(url, data, callback, error_callback) {
                return jQuery.ajax({
                    'type': 'POST',
                    'url': url,
                    'contentType': 'application/json',
                    'data': JSON.stringify(data),
                    'dataType': 'json',
                    'success': callback,
                    'error': error_callback
                });
            };

            $.postJSON('/the_uri', {'foo': 'bar'}, 
            function(response) {
                var a = 0;
            }, 
            function(response) {
                var html = response.responseText;
                var my_window = window.open('', 'mywindow1', 'width=350,height=150');
                $(my_window.document).find('html').html(html);
            });
        });

但是这不会很好地处理javascript。

有没有人有任何建议?

4 个答案:

答案 0 :(得分:3)

你的方法几乎是正确的。我使用以下代码在新窗口中打开响应文本(根本不是特定于Werkzeug或Flask):

var w = window.open('', 'debug_stuff', 'width=540,height=150');
w.document.open();
w.document.write(response.responseText);
w.document.close();

最后一行是最重要的。没有它,代码就会像你的一样 - 它不会执行任何JavaScript,因为浏览器不知道DOM已经完全加载。

答案 1 :(得分:1)

不是javascript,但是您尝试使用Firebug,您可以使用该选项在新标签中查看响应(在新标签页中打开响应)。

答案 2 :(得分:0)

如果您准备对客户端和服务器代码进行一些更改,可以尝试这样做。在您的错误回调中,您将重新发送JSON数据,但作为同步表单提交。您将使用jQuery创建表单,给它一个input标记并将您的JSON放入其中并提交表单。类似的东西:

$('<form method="post" style="display:none;">')
    .attr('action', 'xxx')
    .append(
        $('<input>').val(JSON.stringify(data))
    ).appendTo('body')
    .submit();

在服务器端,当请求的内容类型是application / json和表单数据时,您必须以常规方式接受JSON,例如:

json_string = request.form.get('__json')
if json_string:
    data = json.loads(json_string)

我从未尝试过这个,但我知道你遇到的问题,这可能会浪费很多时间。如果你试试,我想知道它是如何运作的。

答案 3 :(得分:0)

马库斯的回答非常有效。非常感谢!这给我带来了太多麻烦。

还考虑将处理程序分配给jqxhr对象

http://api.jquery.com/jQuery.post/#jqxhr-object

var jqxhr = $.post(...)

然后你会写到新窗口

w.document.write(jqxhr.responseText);