2016-10-24 91 views
0

我有一個render()函數,它不使用延遲,因爲它直接返回響應更快。我不想直接返回字符串,而是先將它寫入請求對象,然後手動完成並返回。能夠在第二個代碼片段中使用return語句是很重要的。扭曲:從阻止請求返回

def render(self, request) 
    return b"not authorized" 

應該成爲(如果可以這樣做)

def render(self, request) 
    request.write(b"not authorized") 
    request.finish() 
    return NOT_DONE_YET 

我注意到,當我返回別的比NOT_DONE_YET我得到一個exceptions.RuntimeError: Request.write called on a request after Request.finish was called.

有有效examples這使用非常相似的序列:

request.redirect(...) 
    request.finish() 
    return NOT_DONE_YET 

那麼,可以使用write/finished/NOT_DONE_YET的組合嗎?

回答

0

確定,根據a docstring in Twisted's source code,預期

render_METHOD方法來返回,這將是 所呈現的頁面的字節字符串,除非返回值是C {server.NOT_DONE_YET},在 這種情況下它這個班級的責任是使用 C {request.write(data)}寫出結果,然後調用C {request.finish()}。