我刚刚得知,使用Rails可以模拟在几行代码控制台的HTTP请求。
退房: http://37signals.com/svn/posts/3176-three-quick-rails-console-tips (节“潜入你的应用程序”)。
有没有类似的方式来做到这一点与Django的? 将方便。
我刚刚得知,使用Rails可以模拟在几行代码控制台的HTTP请求。
退房: http://37signals.com/svn/posts/3176-three-quick-rails-console-tips (节“潜入你的应用程序”)。
有没有类似的方式来做到这一点与Django的? 将方便。
我如何模拟从Python的命令行的请求是:
模拟请求的一种简单方法是:
>>> from django.urls import reverse
>>> import requests
>>> r = requests.get(reverse('app.views.your_view'))
>>> r.text
(prints output)
>>> r.status_code
200
更新:一定要启动Django的外壳(通过manage.py shell
),而不是传统的Python壳。
更新2:对于Django的<1.10,改变第一线
from django.core.urlresolvers import reverse
您可以使用RequestFactory
,这使得
插入一个用户到请求
插入上传的文件到请求
发送特定参数的视图
请注意,您必须同时指定URL和视图类,所以它需要的代码比使用一个额外的行requests
。
from django.test import RequestFactory
request_factory = RequestFactory()
my_url = '/my_full/url/here' # Replace with your URL -- or use reverse
my_request = request_factory.get(my_url)
response = MyClasBasedView.as_view()(my_request) # Replace with your view
response.render()
print(response)
设置请求的用户,执行类似my_request.user = User.objects.get(id=123)
获得的响应之前。
发送参数,以基于类的视图,这样做response = MyClasBasedView.as_view()(my_request, parameter_1, parameter_2)
扩展示例
下面是使用的例子RequestFactory
这些东西结合
HTTP POST(以URL url
,功能视图view
,以及数据字典post_data
)
上传的单个文件(路径file_path
,名称file_name
和表单字段值file_key
)
分配用户到该请求( user
)
传递kwargs字典从URL( url_kwargs
)
SimpleUploadedFile
帮助的方式是有效的形式格式化文件。
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import RequestFactory
request = RequestFactory().post(url, post_data)
with open(file_path, 'rb') as file_ptr:
request.FILES[file_key] = SimpleUploadedFile(file_name, file_ptr.read())
file_ptr.seek(0) # resets the file pointer after the read
if user:
request.user = user
response = view(request, **url_kwargs)
(参见tldr;下)
一个老问题,但只是增加一个答案,万一有人可能有兴趣。
虽然这可能不是最好的(或者可以说的Django)的处事方式。 但你可以尝试做这种方式。
里面你的Django壳
>>> import requests
>>> r = requests.get('your_full_url_here')
说明:我省略了reverse()
解释之中,因为reverse()
或多或少,发现关联到views.py功能的网址,你可以省略reverse()
如果你想,并把整个URL来代替。
例如,如果你有一个朋友app,你Django项目,并希望看到list_all()
在views.py)函数在朋友的应用程序,那么你就可以做到这一点。
TLDR;
>>> import requests
>>> url = 'http://localhost:8000/friends/list_all'
>>> r = requests.get(url)