0

のビュー関数からリクエストオブジェクトを出力するviews.pyと、辞書のようなdjango.core.handlers.wsgi.WSGIRequestオブジェクトが得られます(から継承django.http.HttpRequest)。このディクショナリのようなオブジェクトをビュー関数から出力すると、特にMETAキーに対して一連の値が返されます。

manage.py shellこれと同じデータを自分のプロジェクトから呼び出したいのですが、シェルhandlersの属性ではないため、オブジェクトを取得できません。私のビュー関数のようにリクエストオブジェクトを取得する方法はありますが、から呼び出されますか?django.coredjango.core.handlers.wsgi.WSGIRequestmanage.py shell

4

1 に答える 1

1

目標は「リクエストオブジェクトを複製し、イントロスペクションのためにシェルからそれをいじる」ことなので、リクエストオブジェクトをいじる最も簡単な方法は、デバッガーを使用することです。

以下をコピーしてビューに貼り付け、リロードします。

import pdb; pdb.set_trace()

次に、そのビューを指すページをリロードします。PDBのデバッガーコマンドを使用して、コンテンツを実行できます。たとえば、view関数内で、p requestrequestの値を出力するために使用できます。また、標準のPythonコードを実行することもできます。

(Pdb) path = request.META['USERNAME']
(Pdb) h p
p expression
Print the value of the expression.
(Pdb) p path
'Caspar'
(Pdb) from foo.models import MyUser
(Pdb) MyUser.objects.all()
[<MyUser: Bob: 3.62810036125>, <MyUser: Tim: no rating>, <MyUser: Jim: 2.41014167534>, <MyUser: Rod: 1.35651839383>]

ipdbさらに良いのは、 ( )をインストールすることです。これにより、派手な色とタブ補完を備えた、はるかに優れたIPythonpip install ipdbシェルを使用できます。

または、デバッガーは必要ないがインタラクティブなコンソールが必要な場合は、IPython(pip install ipython)をインストールして次のスニペットを使用します。

import IPython; IPython.embed()

IPythonはipdbの前提条件であるため、ipdbをインストールするとIPythonもインストールされることに注意してください。

于 2012-10-12T05:01:47.357 に答える