django app的CSRF模拟测试

时间:2017-01-13 21:24:55

标签: django django-testing

我想模拟跨站请求伪造查询。

我的查询必须尝试更改投票数量以供选择。在数据库中为“choice.votes”极添加+1。有一个表单可以选择无线电按钮进行选择,提交按钮可以调用“投票”功能。

# I've followed django tutorial 
# https://docs.djangoproject.com/en/1.10/intro/tutorial05/
# Some details about my model:

>>> q = Question.objects.get(pk=1)
>>> q
<Question: spam or egg?>
>>> my_choice = q.choice_set.get(pk=1)
>>> my_choice
<Choice: spam>
>>> my_choice.votes
0

我可以使用postman应用程序手动发送带有关键字{'choice': my_choice.id}的帖子来模拟“攻击”但我需要编写django应用程序测试

到目前为止,在我的测试中我使用django.test.Client这样:

class ChoiceVoteTests(TestCase):
    def test_vote_on_non_existing_question(self):
        non_existing_pk = 2
        q = create_question("q_text", days=-10)
        c = create_choice(q, "c_text", votes=0)
        url = reverse('polls:vote', args=(non_existing_pk,))
        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)

但是使用self.client.post(url, data={'choice': my_choice.id}) 模拟真实用户,点击我的提交按钮,我不想测试。

编辑:

url = reverse('polls:vote', args=(past_q.pk,)) + '?choice=' + str(past_c.id)
response = self.client.post(url)

也行不通。 如何在不使用客户端的情况下发送原始帖子polls/1/vote?choice=1

0 个答案:

没有答案