将参数传递给Flask Application / Celery任务队列

时间:2015-09-09 18:58:09

标签: python curl flask request celery

我有一个使用Celery来运行任务的Flask应用程序。为了启动环境,我启动了一个redis服务器(用于存储结果),然后是Celery,然后是我的应用程序(python app.py)。为了开始工作,我想用cURL发出一个POST请求,我想传入一个参数,该参数将存储在键值中:

curl ... -X POST -d'{“key”:“value”}'

我的Python程序如何接收该参数?通常你在运行python app.py时会使用argv,但这似乎不起作用。

2 个答案:

答案 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