我有一个使用Celery来运行任务的Flask应用程序。为了启动环境,我启动了一个redis服务器(用于存储结果),然后是Celery,然后是我的应用程序(python app.py)。为了开始工作,我想用cURL发出一个POST请求,我想传入一个参数,该参数将存储在键值中:
curl ... -X POST -d'{“key”:“value”}'
我的Python程序如何接收该参数?通常你在运行python app.py时会使用argv,但这似乎不起作用。
答案 0 :(得分:3)
你会使用帖子变量卷曲到地址 如果请求类型是POST并解析post变量,app.py将尝试解析。
发布请求
curl ... -X POST -d '{"type": "sendemail","who":"foo@bar.42"}'
curl ... -X POST -d '{"type": "sendsms","who":"+1297581234"}'
app.js(我不知道烧瓶)
if request.type == 'POST':
if post['type'] == 'sendemail':
celery.createjob('sendemail',post['who'])
elif post['type'] == 'sendsms'
celery.createjob('sendsms',post['who'])
详细了解flask并参阅此SO question
答案 1 :(得分:0)
如果您要发出POST请求,则可以使用requests.post()
而在接收端。您可以使用烧瓶提供的request object
例如:
在客户端:
var pipe = function() {
var queue = [];
var valueOf = Function.prototype.valueOf;
Function.prototype.valueOf = function() {
queue.push(this);
return 1;
};
return function() {
Function.prototype.valueOf = valueOf;
return function(x) {
for (var i = 0, val = x, len = queue.length; i < len; i++) {
val = queue[i](val);
}
return val;
}
};
};
在接收端:
from requests import post
import json
payload = {'product_id': 'B014F6U5N6', 'website_name': 'amazonIN', 'url': 'xyz'}
r = post("http://localhost:5000", json.dumps(payload), headers={'Content-Type': 'application/json'})
print r.text