2017-07-05 112 views
0

這是我在Django視圖中用來接受post請求的函數,但它有時會返回None,對此問題有任何想法?爲什麼我的Django視圖返回None作爲HttpResponse?

def acceptpost(request): 
    try: 
     print "request.method:", request.method 
     print "content_type:", request.content_type 
     print "request.body:",request.body 
     time.sleep(0.1) 
    except Exception as e: 
     log.error(e) 
     return HttpResponse("error") 
    return HttpResponse("OK") 

我用於發佈數據的功能是:

def post_data(url, data) 
    try: 
     req = requests.post(url=url, data=data, verify=False) 
     response = req.status_code 
     content = req.content 
    except RequestException as e: 
     response = e.response 
     log_debug.error("HttpResponse: %s" % response) 
     continue 

這個函數在While True, 網址爲:URL = 'http://127.0.0.1:8000/acceptpost/'。

在大多數情況下,我可以得到正確的HttpResponse,在這種情況下「ok」,有時候我只能得到None,兩個函數都在localhost上運行,Web服務器是Django Web服務器地址爲http://127.0.0.1/acceptpost/。 我還沒有捕獲任何登錄功能acceptpost,但偶爾有HttpResponse None,是否有任何關於這個問題的想法?

+0

你能顯示你的帖子的完整代碼嗎?該網址的數據 – Exprator

+0

嗨,問題已被修改。 – buxizhizhoum

回答

1

您的代碼本身似乎沒有問題。你得到的None來自e.response,這裏等於None。這可能意味着你的請求沒有被髮送,因此沒有響應。

RequestException是一個覆蓋幾種例外的通用異常。我建議你看看this manual page(不知道它是否是最新的,但仍可以很好地瞭解你可以獲得的許多例外情況)。鑑別代碼中的大多數異常將幫助您調試它,我認爲。

+0

謝謝,這是正確的,當有RequestException時,e.response在我的情況下是None,更多的細節信息可以通過e.message得到,另一種獲取更多信息的簡單方法是使用log.error(e)而不是log.error(e.response)。 – buxizhizhoum

相關問題