Публикация JSON и Python Flask - есть ли какие-либо методы использования отладчика Werkzeug? - PullRequest
9 голосов
/ 16 марта 2012

Хорошо, я работаю с бэкэндом RESTful для своего проекта и отправляю данные через jquery.

Должен сказать, что отладчик werkzeug отлично подходит для отладки, особенно когда вы такой же ужасный программист, как и я. Вы специально генерируете исключение, когда хотите исследовать, и проверяете код и переменные, используя html, отрисованный отладчиком.

Однако, когда вы отправляете запрос на отправку вместо 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 ]

3 голосов
/ 06 февраля 2013

Ваш подход был почти правильным. Я использую следующий код, чтобы открыть текст ответа в новом окне (вообще не относится к 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 голос
/ 16 марта 2012

Не javascript, но вы пытались использовать Firebug, вы можете использовать опцию для просмотра ответа в новой вкладке (Открыть ответ в новой вкладке).

0 голосов
/ 23 февраля 2013

Ответ Маркуса работает отлично. Спасибо большое! это избавило меня от хлопот.

также рассмотрите возможность назначения ваших обработчиков для объекта jqxhr

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

var jqxhr = $.post(...)

тогда вы бы написали в новое окно

w.document.write(jqxhr.responseText);
0 голосов
/ 18 марта 2012

Если вы готовы внести некоторые изменения как в коде клиента, так и в коде сервера, вы можете попробовать это. При обратном вызове с ошибкой вы отправляете данные JSON повторно, но в виде синхронной отправки формы. Вы должны создать форму с помощью jQuery, присвоить ей тег input, вставить в нее свой JSON и отправить форму. Что-то вроде:

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

На стороне сервера вам придется принимать JSON обычным образом, когда тип содержимого запроса - application / json и в качестве данных формы, например:

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

Я никогда не пробовал этого, но я знаю проблему, с которой вы столкнулись, и это может потратить много времени. Если вы попробуете это, я бы хотел знать, как это работает.

...