2012-10-12 54 views
0

稱爲當我從視圖函數打印請求對象在views.py我得到一個類似於字典的django.core.handlers.wsgi.WSGIRequest對象(從django.http.HttpRequest繼承)。從視圖函數打印這個類似字典的對象會返回一堆值,特別是對於META密鑰。現在獲取請求對象中的圖的功能,但從`manage.py shell`

我想打電話從我的項目的manage.py shellhandlers這個相同的數據不是django.core在殼體中的屬性,所以我不能讓django.core.handlers.wsgi.WSGIRequest對象。有沒有什麼辦法讓我的視圖函數中的請求對象,但從manage.py shell調用?

+0

爲什麼你需要它在殼? – miki725

+1

真的不確定你在這裏要做什麼。但是你可以在shell中導入'WSGIRequest':'從django.core.handlers.wsgi導入WSGIRequest'。 –

+0

方便,我想從'manage.py shell'中的類似字典的對象中訪問值。 – Bentley4

回答

0

由於你的目標是「複製一個請求對象,並從shell中爲它進行自省」,所以完成請求對象擺弄的最簡單方法是使用調試器。

複製以下內容粘貼到您的視圖,並重新加載它:

import pdb; pdb.set_trace() 

現在重新加載頁面指向該視圖&您可以使用PDB's debugger commands給exec你的東西。例如,一個視圖功能在裏面可以使用p request打印請求的值,你也可以執行標準的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>] 

更妙的是,安裝ipdbpip install ipdb),它可以讓你使用更漂亮IPython外殼,花哨的顏色和標籤完成。

或者,如果你有沒有需要一個調試器,但只是想要一個交互式控制檯,安裝IPython中(pip install ipython),並使用下面的代碼片段:

import IPython; IPython.embed() 

注意,IPython的是IPDB的前提條件,安裝ipdb也將安裝IPython。

+0

我會接受這個答案,直到一個更優雅的解決方案出現。 – Bentley4

+0

@ Bentley4在django文檔中,您可以很好地使用https://docs.djangoproject.com/en/1.10/topics/testing/advanced/#the-request-factory – Jorge

相關問題