2016-10-24 2 views
0

지연 응답을 사용하지 않는 render() 함수가 있습니다. 응답을 직접 반환하는 것이 더 빠르기 때문입니다. 내가 직접 bytestring을 반환하고 싶지는 않지만 요청 객체에 먼저 쓰고 수동으로 마무리 한 다음 반환하십시오. 두 번째 코드 스 니펫에서 return 문을 사용할 수 있어야합니다.뒤틀린 : 차단 요청에서 돌아 가기

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있다 얻을 것으로 나타났습니다 (그렇게하는 것이 괜찮 경우)

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

이 될해야하는 매우 유사한 순서를 사용하십시오 :

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()}를 호출하는 것은이 클래스의 책임입니다.