我想构建一个测试中间件的请求,但我不希望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
做同样的事情。
答案 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