,那么可能值得查找Client
我使用Pinax,并且我正在尝试使用requests
模块对account
项目执行登录测试。
我做了这个
def test001_login(self):
#cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'}
r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
print r.status_code
print r.text
print r.cookies
返回的Cookie为空!!使用get
方法,我得到一个cookie。是什么导致了这个问题?
r.text
结果:
<p>Reason given for failure:</p>
<pre>
No CSRF or session cookie.
</pre>
<p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
<a
href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
CSRF mechanism</a> has not been used correctly. For POST forms, you need to
ensure:</p>
我试着坚持cookies
,但它仍然给了我403的错误。
您的帖子没有将CSRF令牌交给登录名。这行得通吗:
r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
CSRF的工作原理是在表单中添加一个包含不同令牌的隐藏字段,然后在发布表单时对其进行测试。您收到此错误是因为您没有在帖子中包含令牌。你可以绕过它,或者关闭它,或者使用"合适的"单元测试工具。
请参阅CSRF文档。
如果您正在进行测试驱动的开发