我想模拟跨站请求伪造查询。
我的查询必须尝试更改投票数量以供选择。在数据库中为“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
?