Python使用Django请求发布请求数据

时间:2014-04-17 03:48:30

标签: python django

我正在尝试向一个非常简单的django服务器发送一个简单的帖子请求,并且无法解决为什么帖子数据没有出现在请求帖子字典中,而是出现在请求体中。

客户代码:

    payload = {'test':'test'}
    headers = {'Content-type': 'application/json','Accept': 'text/plain'}
    url = "localhost:8000"
    print json.dumps(payload)
    r = requests.post(url,data=json.dumps(payload),headers=headers)

服务器代码:

def submit_test(request):
    if request.method == 'POST':
          print 'Post: "%s"' % request.POST
          print 'Body: "%s"' % request.body
          return HttpResponse('')

服务器上打印的内容是:

Post: "<QueryDict: {}>"
Body: "{"test": "test"}"

我玩过标题并将数据作为直字典发送,似乎没什么用。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:7)

POST字典仅包含在请求正文中发送的表单编码数据。 body属性将请求的原始主体包含为字符串。由于您要发送json编码的数据,因此它只显示在原始body属性中,而不显示在POST中。

查看docs

中的更多信息

尝试使用表单编码数据,您还应该看到POST字典中的值:

payload = {'test':'test'}
url = "localhost:8000"
requests.post(url, data=payload)

答案 1 :(得分:1)

您应该删除&#39;内容类型&#39;来自标题并使用默认值为&#39; multipart / form-data&#39;

response = client.post(
    '/some_url/',
    data={'post_key': 'some_value'},
    # content_type='application/json'
)

如果您取消注释&#39; content_type&#39;数据只会在request.body

答案 2 :(得分:1)

在标题中指定用户代理应该允许Django解释正文的原始数据并正确填充POST字典。以下应该有效:

payload = {'test': 'test'}
url = "http://localhost:8000"
headers = {'User-Agent': 'Mozilla/5.0'}
requests.post(url, data=payload, headers=headers)