升级到Django 1.3后清空request.POST

时间:2011-09-16 10:46:52

标签: python django http-post

以下代码在Django 1.2下正常工作但在Django 1.3下失败,因为request.POST为空,尽管表单数据已正确发布到服务器

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") 

为什么这不起作用,我在这里看不到任何错误?

3 个答案:

答案 0 :(得分:2)

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

我有一个action="foo"的表单,但是我的urls.py将“foo /”映射到视图(我期待一些POST数据,并且没有)。 Django善意服务器端将“foo”的请求重定向到“foo /”,但POST数据未作为交易的一部分重新提交给“foo /”。事后看来,这似乎很明智。更改我的表单(到action="foo/")修复了它,我想更改urls.py也可能有效。

答案 1 :(得分:1)

我记得有这样的问题,结果是访问request.raw_post_data阻止了request.POST dict随后填充了post params。如果删除logging.debug行会发生什么?

答案 2 :(得分:1)

同时检查您的内容类型标题。

例如

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

如果此标头丢失或无效,早期版本更容易接受。