次の例のように、ヘッダーと共にページを出力する関数に基づいてDjangoビューを作成するにはどうすればよいですか?DjangoコードでDjango以外のビューを使用する
def f():
print("Content-Type: text/plain\n\nExample.")
私が思い付くした最高のアイデアは、文字列にリダイレクト出力のテキストを解析し、Djangoの形式で応答を再作成することです。
良い方法がありますか?
次の例のように、ヘッダーと共にページを出力する関数に基づいてDjangoビューを作成するにはどうすればよいですか?DjangoコードでDjango以外のビューを使用する
def f():
print("Content-Type: text/plain\n\nExample.")
私が思い付くした最高のアイデアは、文字列にリダイレクト出力のテキストを解析し、Djangoの形式で応答を再作成することです。
良い方法がありますか?
問題を別の方法で解決することを非常に考慮する必要があります。すなわち、元のコードを変更することです。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を想定し)
これらの関数の結果を使ってHttpResponse objectを構築できます。
なぜ?最初からHTTPレスポンスを構築したいのですか?では、なぜDjangoを使っているのですか?これを行うには、HTTP仕様に精通している必要があります。改行が '\ r \ n 'でなければならないというような詳細が不明な場合、あなたのHTTPは無効になります。 –
@HåkenLid私たちのDjangoプロジェクトと一緒にBrainTree Python SDK(Djangoベースではありません)を使用したい – porton
htmlではなくプレーンテキストを返す場合は、@ souldeuxのようにHttpResponseを使用します。 –