Проводка JSON и python Flask - любые методы использования отладчика Werkzeug?

Хорошо, я работаю с бэкэндом 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 ответа

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


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


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

также рассмотрим назначение ваших обработчиков объекту jqxhr

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

var jqxhr = $.post(...)

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

w.document.write(jqxhr.responseText);


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

$('<form method="post" style="display:none;"><code>')
 .attr('action', 'xxx')
 .append(
 $('').val(JSON.stringify(data))
 ).appendTo('body')
 .submit();</code>
<p>На стороне сервера вам придется принимать JSON обычным способом, когда типом содержимого запроса является application/json и как данные формы, например:</p>
<pre class="prettyprint linenums">json_string = request.form.get('__json')
if json_string:
 data = json.loads(json_string)

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

licensed under cc by-sa 3.0 with attribution.