2013-07-15 3 views
1

Я искал в google и в stackoverflow и мог найти хороший ответ.Обрабатывать события JSON в Python

у меня есть этот код на моем HTML-страницы, получает HTML вывод питон (я использую JQuery):

$.ajax({ 
    type: "POST", 
    url: "getHTML.py", 
    success: function(response) 
    { 
     $('body').append(response); 
    } 
}); 

питон файл выглядит следующим образом:

baseHTML = "www.google.com" 
user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" 
headers = {"User-Agent": user_agent} 
req = urllib2.Request(baseHTML, headers=headers) 

forumHTML = urllib2.urlopen(req) 

page = Soup(forumHTML) 

for e in page.findAll('script'): 
    e.extract() 

print 'Content-Type: text/plain\r' 
print '\r' 
print page 

Каждая вещь работает и Я счастлив, но ... теперь я попытался добавить еще один JSON, который был отправлен одним нажатием кнопки:

$('#GetByURL_button').on("click", function(){ 
    $.ajax({ 
     url: "getHTML.py", 
     type: "POST", 
     data: JSON.stringify({"newURL": "www.stackoverflow.com"), 
     dataType: "json", 
     success: function(response) { 
      alert(response); 
     } 
    }); 
}); 

и теперь я просто не знаю, как обрабатывать это событие в python.

Так просто быть ясно, - я хочу питон иметь что-то вроде:

  1. если пользователь не проси (через JSON) страницу загрузки по умолчанию,
  2. если пользователь попросил «StackOverflow» (через JSON) загрузить www.stackoverflow.com
  3. , если пользователь попросил загрузить «собаку» www.DogsAreCool.com.

Тпй за помощь :)

+0

Какой сервер вы используете? Общий веб-сервер, на котором запущены скрипты Python через WSGI или CGI или mod_python? Стандартный веб-сервер Python? Что-то обычай? – abarnert

+2

Вы посмотрели на [Бутылка] (http://bottlepy.org/docs/stable/)? –

+0

Вы пытаетесь написать 'proxy' с помощью python? – dnozay

ответ

3

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

Итак, предположим, вы используете механизм, который дает вам тело запроса как stdin, например, CGI старой школы. Вы бы сделать что-то вроде этого:

content = sys.stdin.read() 
data = json.loads(content) 
newURL = data.get('newURL') 
if newURL == 'dog': 
    newURL = 'http://www.DogsAreCool.com' 
elif not newURL: 
    newURL = defaultPageURL 
response = urllib2.urlopen(newURL) 
# ... 
+0

... но не делайте этого, используйте фреймворк. –

+0

@ DanielRoseman: Да, определенно. Но структура в лучшем случае превратит первые две строки в одну строку (если вы используете фреймворк, который будет вызывать вашу функцию с объектом вместо запуска вашего скрипта с помощью 'stdin'), поэтому большая часть кода (тривиальная как это будет) будет одинаковым. – abarnert

2

два подхода:

  • ваш посыла сервер поддерживает правильный URL с помощью нормального ответа HTTP (200 OK)
  • код Аякса устанавливает window.location
  • ваш браузер с радостью перенастроит

Второй: