目前,我正在使用TestCase发出一个HTTP Post请求,该请求被重定向并且没有post数据。我想在不重定向的情况下发布帖子请求并保留数据。我该怎么办?
1)重定向的证据:
婴儿/ urls.py
来自django.conf.urls导入模式,include,url
urlpatterns = patterns('babies',
# Endpoints
url(r'^create_baby/$', 'views.create_baby'),
...
)
婴儿/ tests.py
from django.test import TestCase
from django.test.client import Client
import pdb
class OrderCreationTest(TestCase):
def setUp(self):
self.normal_baby_data = {
'birth_time': {
'date' : '04-07-2013'
}
}
def test_baby_creation(self):
response = self.client.post('/consumer/create_baby/',
self.normal_baby_data,
follow=True
)
pdb.set_trace()
bash结果:
(Pdb) response.redirect_chain
[('https://testserver/consumer/create_baby/', 302)]
如果follow = False,则永远不会创建视图的create_baby方法,也没有重定向链。 bash结果是:
(Pdb) response.redirect_chain
*** AttributeError: 'HttpResponseRedirect' object has no attribute 'redirect_chain'
2)证据表明没有发布数据
婴儿/ views.py
def create_baby(request):
pdb.set_trace()
...
(Pdb) p request
<WSGIRequest
path:/consumer/create_baby/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
COOKIES:{'sessionid': 'f88ffoplh6lyytarn9n85z6bd5lefbzo'},
META:{u'CONTENT_TYPE': 'text/html; charset=utf-8',
u'CSRF_COOKIE': u'OC5LFOj8HvqTu0cKoAmty7vkYP0jNk3Q',
u'HTTP_COOKIE': u' sessionid=f88ffoplh6lyytarn9n85z6bd5lefbzo; Domain=None; expires=None; Max-Age=None; Path=/; secure',
u'PATH_INFO': u'/consumer/create_order/',
u'QUERY_STRING': '',
u'REMOTE_ADDR': '127.0.0.1',
u'REQUEST_METHOD': 'GET',
u'SCRIPT_NAME': u'',
u'SERVER_NAME': 'testserver',
u'SERVER_PORT': '80',
u'SERVER_PROTOCOL': 'HTTP/1.1',
u'wsgi.errors': <_io.BytesIO object at 0x10a6fa230>,
u'wsgi.input': <django.test.client.FakePayload object at 0x10b067b50>,
u'wsgi.multiprocess': True,
u'wsgi.multithread': False,
u'wsgi.run_once': False,
u'wsgi.url_scheme': 'https',
答案 0 :(得分:2)
(好的,与OP的问题无关,但与Django测试客户端302相关)
FWIW,如果您已为视图登录/验证,请检查您的client_stub登录是否成功。我本以期待以下例外:
res = cls.client_stub.login(username=cls.username, password=cls.password)
根本没有抱怨,但事实上,我的用户名和密码没有设置,登录失败了。正在进行测试的实际网址是将登录失败的302登录到登录页面。
答案 1 :(得分:0)
来自您自己的pdb转储,
<WSGIRequest path:/consumer/create_order/, ...>
在某处,请求被重新路由以将您推送到/consumer/create_order/
如果这实际上是预期的行为,您需要知道POST数据不在重定向中存活。这是浏览器的一个功能,而不是Django中的错误。