升级到Django 1.3后request.POST为空

1 投票
3 回答
1395 浏览
提问于 2025-04-17 02:26

下面这段代码在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 个回答

1

另外,检查一下你的内容类型头信息。

比如:

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

早期的版本对这个头信息缺失或不正确时更宽容一些。

2

我之前也遇到过类似的问题(request.POST是空的),那是在使用django 1.3的时候,但问题出在我的HTML代码上。

我有一个表单,设置了action="foo",但是在我的urls.py文件里,“foo/”被映射到了一个视图(我本来期待能收到一些POST数据,但结果什么都没有)。Django很贴心地把对“foo”的请求重定向到了“foo/”,但POST数据并没有随之重新提交到“foo/”。现在想想,这样的处理方式其实挺合理的。最后我把表单改成了action="foo/",这样问题就解决了。我想如果我修改urls.py也可能会有效果。

1

我记得我也遇到过类似的问题,结果发现访问 request.raw_post_data 会导致 request.POST 这个字典后面不能再填充提交的参数。如果你去掉了 logging.debug 这一行,会发生什么呢?

撰写回答