以下代码在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")
为什么这不起作用,我在这里看不到任何错误?
答案 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'
如果此标头丢失或无效,早期版本更容易接受。