【问题标题】:Passing arguments to a Flask Application/Celery Task Queue将参数传递给 Flask 应用程序/Celery 任务队列
【发布时间】:2015-12-05 21:03:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: python curl flask request celery


    【解决方案1】:

    如果你想发出 POST 请求,那么你可以使用requests.post() 在接收端。你可以使用flask提供的request object
    例如:
    在客户端:

    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
    

    在接收端:

    from flask import request
    product_id = request.json['product_id']
    url = request.json['url']
    website_name = request.json['website_name']
    

    【讨论】:

      【解决方案2】:

      你会 curl 到带有 post 变量的地址。
      app.py 会尝试解析请求类型是否为 POST 并解析 post 变量。

      发布请求

      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

      【讨论】:

        猜你喜欢
        • 2017-06-28
        • 2014-08-23
        • 2018-10-19
        • 2018-01-04
        • 2019-11-13
        • 2012-03-22
        • 2016-02-28
        • 2012-12-24
        • 1970-01-01
        相关资源
        最近更新 更多