【问题标题】:Empty request.POST after upgrade to Django 1.3升级到 Django 1.3 后清空 request.POST
【发布时间】:2011-09-16 10:46:51
【问题描述】:

以下代码在 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") 

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

【问题讨论】:

  • 我不确定它是否能解决你的问题,但无论如何你都应该这样做transaction_id=request.POST.get('TransactionID', None)
  • request.raw_post_data 是空的,您是否尝试使用 django-debug-toolbar?
  • 如果有请提供回溯。
  • no request.raw_post_data 不为空,它包含正确的表单数据
  • 你的表单是什么样子的?

标签: python django http-post


【解决方案1】:

我在使用 django 1.3 时遇到了类似的问题(空 request.POST),但这是由于我的 HTML 中的错误造成的。

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

【讨论】:

  • 太棒了,这帮助了我。我有一个 AJAX 调用转到“/new_player”,并且 urls.py 正在重定向到“/new_player/”并运行用于“/new_player/”的视图,但 POST/GET 数据在重定向之间丢失了。跨度>
【解决方案2】:

我记得遇到过这样的问题,结果发现访问request.raw_post_data 阻止了request.POST dict 随后被post 参数填充。如果删除 logging.debug 行会发生什么?

【讨论】:

  • 对,这就是问题所在,当您在 request.raw_post_data 之前访问 request.POST 时,它可以工作。在 Django 1.2 中,这在 1.3 中无关紧要
【解决方案3】:

还要检查您的内容类型标题。

例如。

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

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

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2013-05-30
    • 2011-08-22
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多