【问题标题】:How to make a Flask Endpoint?如何制作 Flask 端点?
【发布时间】:2014-05-07 20:23:15
【问题描述】:

正如您从我之前的问题中看到的那样,我一直在做一个项目,我真的很想知道如何才能完成最后一部分。

项目快速总结:我有一个运行 Web 服务器 (Lighttpd) 和 Flask 的 Raspberry Pi。它连接了一个 RF USB 发射器,它通过 Python 脚本控制插头的电源。 (Power.py在 GitHub 上)。这行得通。

我现在需要在 Flask 中创建一个端点,以便 Salesforce 可以向它发送一些 JSON,它会理解它。

我想让它尽可能简单,所以我明白它实际上在做什么。在我的上一个问题中,确实有人向我提供了一些东西,但我认为最好有一个与之相关的具体问题,而不是试图在一个问题中涵盖太多。

我只需要发送'power=on/off''device=0,1,2''time=(secondsasinteger)''pass=thepassword' 我可以将其作为 URL 变量或 POST 发送到上面链接的现有 power.py,它确实如此它。

我想要一种简单、清晰的方式,将其从 Salesforce 以 JSON 格式发送到 Flask 并使其理解请求。

我现在需要做的就是去:ip/cgi-bin/power.py?device=0&power=on&time=10&pass=password

这将加载一个 Python 脚本,并打开设备 0 10 秒。 (0 是无限的)。

如何将其转换为 JSON?我需要在 Flask 中输入什么代码才能理解它?我可以将变量转发到power.py 以便 Flask 文件只需要找到变量和值吗?

我已经在 Chrome 中下载了 Postman,这使我可以将 POST 发送到 Pi 以进行测试。

作为初学者,我在哪里可以找到有关此的更多信息?

我可以发送这样的东西吗?

'requestNumber = JSONRequest.post(
"ip/api.py",
{
    deviceid: 0,
    pass: "password",
    time: 60,
    power: "on"
},'

【问题讨论】:

  • 任何带有@app.route(...) 装饰器的东西都是端点。你读过Flask Quickstart 了吗?您可能也想关注tutorial
  • 我已经完成了快速启动并制作了Hello World,并显示了时间。不过,我还没有完成该教程,它似乎使事情变得过于复杂。我只有 4 个变量,并且已经有一个可以管理它们的脚本,我实际上只需要 JSON 来发送该信息,而 Pi 来理解它。不过,我现在将完成该教程。谢谢]
  • 参见request.get_json();当某些东西使用application/json mimetype 发布 JSON 时,request 对象上的该方法将使您能够访问已解析的 Python 表示。
  • 我想我明白你的意思,但我将如何实际使用它?只需阅读更多文档,我相信我可以让 Flask 发送 POST 吗?当然,这会让事情变得更容易。如果它可以接收 JSON 格式的变量,那么只需将它们发布到我的 power.py 脚本?
  • 为什么不处理power.py 在您的 Flask 端点中所做的一切?您可以使用urllib2requests(外部)库发布到您的power.py CGI,但为什么不让power.py 处理JSON 或让Flask 服务器直接处理RF USB 发射器?

标签: python json api flask raspberry-pi


【解决方案1】:

我不知道如何让 saleforce 发送带有关联 JSON 的 POST 请求,但使用 Flask 捕获它相当容易。考虑以下示例:

from flask import request
from yourmodule import whatever_function_you_want_to_launch
from your_app import app

@app.route('/power/', methods=['POST'])
def power():
    if request.headers['Content-Type'] == 'application/json':
        return whatever_function_you_want_to_launch(request.json)
    else:
        return response("json record not found in request", 415)

当 saleforce 访问 URL http://example.com/power/ 时,您的应用程序会执行 power() 函数,将包含 JSON 内容的字典作为参数传递给它。 whatever_function_you_want_to_launch 函数可以使用字典来触发您想要执行的任何操作,并将响应返回给 power() 函数。 power() 函数会将此响应返回给 salesforce。

例如:

def whatever_function_you_want_to_launch(data):
    device = data['deviceid']
    power = data['power']
    message = ""
    if power == "on":
       turn_power_on(device)
       message = "power turned on for device " + device
    else:
       turn_power_off(device)
       message = "power turned off for device " + device
    return make_response(message, 200)

当然,这只是一个简短的例子。您需要添加一些额外的东西(例如,处理 JSON 格式错误或不包含请求的密钥之一的情况)。

为了测试整个内容,您还可以使用 curl 命令(在 Linux 上可用,不知道在其他操作系统上可用)和这种语法:

curl -H "Content-type: application/json" -X POST http://localhost:5000/power/ -d '{"deviceid": "0", "pass": "password", "time": "60", "power": "on"}'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2013-01-13
    • 2017-04-02
    • 1970-01-01
    相关资源
    最近更新 更多