2017-01-26 3 views
-3

Как создать представление Django на основе функции, выводимой на страницу вместе с заголовками, например, следующей примерной функцией?Использование представления не Django в коде Django

def f(): 
    print("Content-Type: text/plain\n\nExample.") 

Лучшая идея, которую я придумал для перенаправления на строку, синтаксический анализ текста на выходе и воссоздать отклик в формате Django.

Есть ли лучшие способы?

+0

Почему? Вы действительно хотите построить ответ HTTP с нуля? Тогда почему вы используете Django? Если вы хотите это сделать, вы должны ознакомиться с спецификацией HTTP. Если вы пропустите детали, такие как требование о том, что разрывы строк должны быть '\ r \ n', ваш HTTP будет недействительным. –

+0

@ HåkenLid Я хочу использовать SDK BrainTree Python (который не является Django) вместе с нашим проектом Django. – porton

+0

Если вы хотите вернуть обычный текст вместо html, используйте HttpResponse, как предлагает @souldeux. –

ответ

0

Вы должны решить проблему по-разному - например, изменить исходный код: в python мы предпочитаем улучшать код с помощью патчей, чтобы сохранить плохой код в живых.

Если вы с этим не согласны, вы можете переопределить print своим собственным вызываемым, который содержит вывод в списке строк и создает ответ HTTP с захваченным выходом. Имейте в виду, что это считается последний вариант курорта ...:

import builtins 


def foo(): 
    print(1) 
    print(2) 
    print(3) 


def bar(): 
    print_ = builtins.print 

    buff = [] 

    def p(*pargs, **pkwargs): 
     buff.append((pargs, pkwargs)) 

    builtins.print = p 
    try: 
     foo() 
    finally: 
     builtins.print = print_ 

    for x in buff: 
     print(x) 


bar() 

(Предполагает питон 3)

+0

Как« переопределить »его? – porton

+0

отредактировал ответ – Udi

1

Вы можете использовать результаты этих функций для построения HttpResponse object.

+0

Ваш ответ будет полным, если вы указали детали КАК это сделать – porton

+0

Прочтите связанные документы. – souldeux

+0

В документах нет ничего о том, как перехватить вывод 'print' и как его разобрать, чтобы получить отдельные заголовки и тело ответа – porton

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