2011-09-16 42 views
1

下面的代码工作正常的Django 1.2下不过在Django 1.3由于request.POST是空下会失败,尽管表单数据被正确地发送到服务器空request.POST之后升级到1.3的Django

def commit_form(request): 
    logging.debug(str(datetime.datetime.now()) + ": commit data " + request.raw_post_data) 
    purchase = Purchase.objects.get(transaction_id=request.POST['TransactionID']) #breaks here, request.POST is empty 

    #other stuff... 

    return HttpResponse("GOOD", mimetype="text/plain") 

为什么这是行不通的,我在这里看不到任何错误?

+0

我不知道它是否会解决你的问题,但你应该在任何情况下做'transaction_id = request.POST.get('TransactionID',None)' – demux

+0

是'request.raw_post_data'是空的,你尝试使用django-debug-toolbar? – Pannu

+1

请提供追溯(如有)。 –

回答

1

我记得有这样的问题,事实证明,访问request.raw_post_data阻止request.POST字典后来填充后参数。如果您删除了logging.debug行,会发生什么情况?

+0

对,就是这个问题,它在request.raw_post_data之前访问request.POST时有效。在Django 1.2中,这在1.3中无关紧要 – Simon

2

我有一个类似的问题(空request.POST)与Django的1.3,但它是由于我的HTML中的错误。

我有一个action="foo"的表格,但我的urls.py将“foo /”映射到了视图中(我在等待一些POST数据,并且没有找到)。 Django恳请服务器端将“foo”请求重定向到“foo /”,但POST数据没有被重新提交给“foo /”作为交易的一部分。事后看来,这似乎相当明智。改变我的表格(到action="foo/")修复它,我想改变urls.py也可以工作。

+0

真棒,这帮了我。我有一个AJAX调用去'/ new_player'和urls.py重定向到'/ new_player /'并运行'/ new_player /'的视图,但POST/GET数据在重定向之间丢失。 – Furbeenator

1

另请检查您的内容类型标题。

例如,

'CONTENT_TYPE': 'application/x-www-form-urlencoded' 

如果此标题丢失或无效,则早期版本更适应。