【问题标题】:Is this the correct format of POST body?这是 POST 正文的正确格式吗?
【发布时间】:2013-06-17 03:26:39
【问题描述】:

我正在发布到 Django 中的视图。 POST 正文包含以下格式的数据:

{
    'Service' : 'API'
}

我认为我正在这样做:

args = request.POST
service = args.get('Service', '').strip()

但是service 出现为''

我用过pdb,request.POST是这样的:

<QueryDict: {u"{\n    'Service' : 'API'\n}": [u'']}>

这就是 service 变成 '' 的原因,因为它已经变成了 dict-in-a-dict。我想知道这应该发生吗? [u''] 是什么。它是从哪里添加到体内的?如果这是应该发生的事情,我如何解析身体以摆脱Service

【问题讨论】:

  • 是整个 POST dict 吗?要获取字典,您可以通过request.POST.copy() 获取准确的帖子字典。此外,还有其他东西弄乱了代码。就像{\n 'Service' : 'API'\n} 被评估为关键
  • 如何将信息发布到视图中?通过模板?你能稍微说明一下吗?
  • @karthikryes。就像我没有发布其他领域一样。那么我应该如何摆脱 request.POST 字典中的 \n 呢?我的意思是当发布 \n is going to be included any way right?
  • 好吧.. 它不应该,但显然某些格式或某种代码弄乱了 POST。您可以发布您的 HTML 并查看吗?还有整个 POST 对象?
  • @PauloBu 最终它将成为客户端发布数据。所以目前我正在使用 RESTClient for Fireox。

标签: python django http-post


【解决方案1】:

如果您要发布这样的字符串(常见于 JSON-RPC 之类的东西),而不是使用已知格式(例如 multipart/form-data),您可以使用它(在您看来):

def post(self, request, *args, **kwargs):
    body = request.body  # This is your string
    data = json.loads(body)
    service = data['Service']

这取决于您的前端代码发回有效的 JSON 数据。否则,您将被留给自己的设备来解码不那么标准的东西(例如,您的示例使用单引号 - 无效的 JSON)。使用 JSON.stringify(my_obj) 将 JavaScript 对象编码为 JSON,然后发布该值。

【讨论】:

  • 我停止使用 REST 客户端。使用请求模块编写了一个脚本来发布数据。它现在工作正常。 :)
  • 好主意 - requests 是一个了不起的图书馆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多