2016-10-24 6 views
0

У меня есть функция render(), которая не использует отложенные функции, поскольку она быстрее возвращает ответ напрямую. Я не хочу напрямую возвращать bytestring, но сначала пишу его в объект запроса, завершаю его вручную, а затем возвращаю. Важно, чтобы я мог использовать оператор return во втором фрагменте кода.Twisted: возврат из запроса блокировки

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, как ожидается, возвращает строку байтов, которая будет отображаемой странице, если возвращаемое значение не является С {server.NOT_DONE_YET}, в этом случае это обязанность этого класса записывать результаты с помощью C {request.write (data)}, а затем вызвать C {request.finish()}.

 Смежные вопросы

  • Нет связанных вопросов^_^