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

Python 在视图函数中获取请求对象,但从`manage.py shell'调用`,python,django,Python,Django,当我从views.py中的视图函数打印请求对象时,我会得到一个类似于django.core.handlers.wsgi.WSGIRequest对象的字典(继承自django.http.HttpRequest)。从视图函数打印这个类似字典的对象会返回一组值,特别是对于META键 现在我想从我的项目的manage.py shell调用相同的数据,但是handlers不是shell中django.core的属性,因此我无法获取django.core.handlers.wsgi.WSGIRequest对

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

现在我想从我的项目的
manage.py shell
调用相同的数据,但是
handlers
不是shell中
django.core
的属性,因此我无法获取
django.core.handlers.wsgi.WSGIRequest
对象。是否有任何方法可以像在my view函数中那样获取请求对象,但从
manage.py shell调用它?

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

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

import pdb; pdb.set_trace()
现在重新加载指向该视图的页面&您可以使用它来执行您的内容。例如,在视图函数中,可以使用
p request
打印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>]

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

为什么需要在shell中安装它?确实不确定您在这里要做什么。但是您可以在shell中导入
WSGIRequest
:从django.core.handlers.wsgi导入WSGIRequest
。为了方便起见,我想从
manage.py shell
@John:如何为
WSGIRequest
中的键加载与我的视图函数相同的值?(要查看我正在谈论的那些值:只需在视图函数中添加
print request
,并通过转到相关的url触发该视图函数。)只需复制一个请求对象并从shell中拨弄它以进行内省。我更喜欢这样做,而不是每次都需要调整我的
views.py
。您可以从views.py中填充模型,也可以从manage.py shell中填充模型,并从中反思您的模型,因此,为什么我不希望对请求对象执行类似的操作呢?在找到更优雅的解决方案之前,我会接受这个答案。@Bentley4在django文档中,您已经详细介绍了这一点
import IPython; IPython.embed()