2017-01-26 1 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私たちのDjangoプロジェクトと一緒にBrainTree Python SDK(Djangoベースではありません)を使用したい – porton

+0

htmlではなくプレーンテキストを返す場合は、@ souldeuxのようにHttpResponseを使用します。 –

答えて

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() 

(のpython 3を想定し)

+0

「オーバーライドする」方法? – porton

+0

は答えを編集しました – Udi

1

これらの関数の結果を使ってHttpResponse objectを構築できます。

+0

あなたが詳細を指定した場合、あなたの答えは完了するでしょうこれを行う方法 – porton

+0

リンクされたドキュメントを読んでください。 – souldeux

+0

文書には、 'print'出力を傍受する方法と、それを解析して別々のヘッダーと応答本体を取得する方法については何もありません。 – porton

関連する問題