0

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

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

4

1 回答 1

1

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

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

import pdb; pdb.set_trace()

现在重新加载指向该视图的页面,您可以使用PDB 的调试器命令来执行您的内容。例如,在视图函数中,您可以使用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>]

更好的是,安装ipdb( pip install ipdb),它可以让您使用更好的IPython shell,具有精美的颜色和制表符补全。

或者,如果您不需要调试器而只需要一个交互式控制台,请安装 IPython ( pip install ipython) 并使用以下代码段:

import IPython; IPython.embed()

请注意,IPython 是 ipdb 的先决条件,因此安装 ipdb 也会安装 IPython。

于 2012-10-12T05:01:47.357 回答