获取请求对象,如在视图函数中,但从`manage.py shell`调用

时间:2012-10-12 00:24:07

标签: python django

当我从views.py中的视图函数打印请求对象时,我得到一个类似字典的django.core.handlers.wsgi.WSGIRequest对象(继承自django.http.HttpRequest)。从视图函数中打印此类字典对象会返回一组值,尤其是META键。

现在我想从我项目的manage.py shell调用相同的数据,但handlers不是shell中django.core的属性,所以我无法获得{{1}对象。有没有办法在我的视图函数中获取请求对象,但是从django.core.handlers.wsgi.WSGIRequest

调用

1 个答案:

答案 0 :(得分:0)

由于您的目标是“复制请求对象并从shell中进行内省以进行内省”,因此完成摆弄请求对象的最简单方法是使用调试器。

将以下内容粘贴到您的视图中并重新加载:

import pdb; pdb.set_trace()

现在重新加载指向该视图的页面&你可以使用PDB's debugger commands执行你的东西。例如,在视图函数中,您可以使用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。