2013-07-15 31 views
1

我已經在谷歌和stackoverflow搜索,並可以找到一個很好的答案。在Python中處理JSON事件

我有我的HTML網頁上的代碼,得到蟒蛇的HTML輸出(我使用jQuery):

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

Python文件看起來像這樣:

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. 如果用戶要求「計算器」 (通過JSON)負載www.stackoverflow.com
  3. 如果用戶要求「狗」負載www.DogsAreCool.com。

TNX的幫助:)

+0

你在運行什麼樣的服務器?通過WSGI或CGI或mod_python運行Python腳本的通用Web服務器?一個標準的Python Web服務器?定製的東西? – abarnert

+2

你看過[Bottle](http://bottlepy.org/docs/stable/)嗎? –

+0

你想用python編寫'proxy'嗎? – 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

@丹尼羅斯曼:是的,當然。但是框架最好將前兩行變成一行(如果你使用的是一個框架,它會用一個對象調用你的函數,而不是用'stdin'運行你的腳本),所以大部分代碼(平凡的因爲它)將是相同的。 – abarnert