升级到Django 1.3后request.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 个回答
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 这一行,会发生什么呢?