Python Django测试客户端-sendng POST数据返回400错误

Python Django测试客户端-sendng POST数据返回400错误,python,django,unit-testing,testing,post,Python,Django,Unit Testing,Testing,Post,我在为Django编写测试时遇到了问题(这个框架刚刚开始)。在浏览器中,一切都是完美的,但当我使用TestCase时,似乎请求方法不是POST。代码如下: views.py: def save(request, quiz_id): try: quiz = get_object_or_404(Quiz, pk=quiz_id) qset = Question.objects.filter(quiz=quiz_id) except IndexError

我在为Django编写测试时遇到了问题(这个框架刚刚开始)。在浏览器中,一切都是完美的,但当我使用TestCase时,似乎请求方法不是POST。代码如下:

views.py:

def save(request, quiz_id):
    try:
        quiz = get_object_or_404(Quiz, pk=quiz_id)
        qset = Question.objects.filter(quiz=quiz_id)
    except IndexError:
        raise Http404
    questions = []
    if request.method == 'POST':
        f = QuizForm(request.POST, qset)
        if f.is_valid():
            do_stuff()
            return render(request, 'quiz/results.html', {'questions': questions})
    return HttpResponseBadRequest()
tests.py:

def test_results(self):
    post_data = {
        'ans10': 43,
        'ans6' : 28,
        'ans7' : 33,
        'ans8' : 36,
        'ans9' : 38,
    }
    resp = self.client.post('/1/save/', post_data)
    self.assertEqual(resp.status_code, 200)
和运行测试:

self.assertEqual(resp.status_code, 200)
AssertionError: 400 != 200

表单是有效的,传递的数据是正确的,在浏览器中,就像我说的,一切正常。我对这个测试有点问题,好像请求方法不是POST。感谢您的帮助。

鉴于您的缩进破损,很难判断,但如果是POST请求,并且表单有效,您的视图似乎只会返回200。可能是您的表单没有验证吗

这就是说,建议的流程是在成功的帖子上返回一个重定向到结果页面(google的“post redirect get”)以避免在页面重新加载时重复提交


完全不相关,但try/expect块中的任何语句都不会引发索引器,如果
Question
Quizz
上有外键,您应该能够使用
Quizz.Question\u set.all()
直接检索问题

请修复代码缩进。在文件中一切正常;)但是我会修正。url模式是什么?顺便说一句,
get\u object\u或_404
可能会引发
测验。DoesNotExist
,但它永远不会引发
索引器
。如果
f
无效,您应该返回或至少记录错误。您可能想向我们展示
QuizForm
的代码。