2011-11-04 43 views
0

我目前正在嘗試從頭開始爲我的django網站創建一個REST Web服務,並且我不想使用外部庫,因爲這應該是一種學習體驗。其中一個應用程序充當Web應用程序,另一個充當Web服務。我有很多關於如何實現Web服務和返回Http響應的例子,但問題是生成和發送http請求,我沒有一個例子。我希望我的應用程序發送一個http請求給接收它並作出響應的另一個應用程序。python中的HttpRequests沒有被django拾起

Web服務完全響應瀏覽器生成的請求。我只是在地址欄中寫入資源的地址,然後得到預期的響應。 我測試過使用python的內置urllib2的urlopen,但它會永遠掛起,可能是因爲套接字被佔用。我意識到我沒有指定超時,但我的擔心更多的是服務器永遠不會收到請求。沒有發生請求的日誌。代碼和瀏覽器中的網址是相同的。

django有沒有一種方法可以簡單地生成一個HttpRequest,並在沒有太多大驚小怪的情況下發送它?

#This is the offending line. 
response = urllib2.urlopen('http://127.0.0.1:8000/api/browse/') 

回答

2

這只是因爲開發服務器是單線程的。它不能同時響應來自客戶端的原始請求和內部生成的請求,因此它會掛起。

+0

好的,urlopen在發送請求後進入等待模式,防止服務器響應。但我應該怎麼做呢?我希望不必在單獨的服務器上運行應用程序。 – Steinin

+0

這只是開發服務器的限制,並不會在生產中發生。 –

+0

我會接受你的回答。這不是我所尋找的,但仍然是一個正確的答案。我通過簡單地調用函數來跳過消息傳遞,同時仍然向HTTP請求提供Web服務。爲了確保那些工作,我使用了django測試模塊。 – Steinin