如何使用Django发送POST请求?

40

我不想使用html文件,但只有使用Django时,我才需要制作POST请求。

就像urllib2发送get请求一样。

5个回答

45

以下是使用python-requests编写被接受答案示例的方法:

post_data = {'name': 'Gladys'}
response = requests.post('http://example.com', data=post_data)
content = response.content

更加直观易懂。请参阅Quickstart以获取更简单的示例。


37

在Python 2中,结合 urllib2urllib 的方法可以完成这个任务。以下是我使用这两个方法来发布数据的示例:

post_data = [('name','Gladys'),]     # a sequence of two element tuples
result = urllib2.urlopen('http://example.com', urllib.urlencode(post_data))
content = result.read()

urlopen() 是用于打开 URL 的方法。 urlencode() 将参数转换为百分号编码的字符串。


8

1
网址已经失效,请在引用链接时提供一些示例。 - majin

5
你可以在Django中使用urllib2。毕竟,它仍然是Python。要使用urllib2发送POST请求,可以发送data参数(取自here): urllib2.urlopen(url [,data] [,timeout])
[...]当提供data参数时,HTTP请求将成为POST而不是GET

2

请注意,当您使用 requests 并在 data 参数中传递字典以进行 POST 请求时:

原始答案翻译成“最初的回答”。

payload = {'param1':1, 'param2':2}
r = request.post('https://domain.tld', data=payload)

你正在传递表单编码的参数。
如果您想仅使用JSON(服务器之间集成中最常见的类型)发送POST请求,则需要在data参数中提供str()。 在使用JSON的情况下,您需要导入json库并像这样操作:
"最初的回答"
 payload = {'param1':1, 'param2':2}
 r = request.post('https://domain.tld', data=json.dumps(payload))`

文档在这里

或者: 只需在dict中提供数据,使用json参数即可。


"Original Answer"翻译成"最初的回答"
payload = {'param1':1, 'param2':2}
r = request.post('https://domain.tld', json=payload)`

1
如何导入 requests? - Orville
2
使用命令 pip install requests 安装该库,然后在您的程序中引入 import requests - Deepstop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接