使用Django RequestFactory而不是表单数据

时间:2018-03-15 17:53:12

标签: python django testing

我想构建一个测试中间件的请求,但我不希望POST请求总是假设我正在发送表单数据。有没有办法为request.body生成的请求设置django.test.RequestFactory

即,我想做类似的事情:

from django.test import RequestFactory
import json

factory = RequestFactory(content_type='application/json')
data = {'message':'A test message'}
body = json.dumps(data)
request = factory.post('/a/test/path/', body)

# And have request.body be the encoded version of `body`

上面的代码将无法通过测试,因为我的中间件需要将数据作为request.body中的文档传递,而不是request.POST中的表单数据。但是,RequestFactory始终将数据作为表单数据发送。

我可以使用django.test.Client

执行此操作
from django.test import Client
import json

client = Client()
data = {'message':'A test message'}
body = json.dumps(data)
response = client.post('/a/test/path/', body, content_type='application/json')

我想对django.test.RequestFactory做同样的事情。

2 个答案:

答案 0 :(得分:5)

RequestFactory内置了对JSON有效负载的支持。您不需要先转储数据。但是你应该将内容类型传递给post,而不是实例化。

factory = RequestFactory()
data = {'message':'A test message'}
request = factory.post('/a/test/path/', data, content_type='application/json')

答案 1 :(得分:1)

我已经尝试过杰伊的解决方案,但是没有用,但是经过一番研究,它确实做到了(Django 2.1.2)

__init__.py