如何创建Flask端点?

1 投票
1 回答
2456 浏览
提问于 2025-04-18 00:18

从我之前的问题中你可以看到,我一直在做一个项目,现在我真的想知道怎么把最后一部分完成。

项目的简单总结:我有一个树莓派,它在运行一个网页服务器(Lighttpd)和Flask。它连接了一个RF USB发射器,通过一个Python脚本控制插座的电源。(在GitHub上的Power.py)。这个功能是可以正常工作的。

现在我需要在Flask中创建一个接口,这样Salesforce就可以发送一些JSON数据过来,而Flask能够理解这些数据。

我想尽量简单明了,这样我才能理解它到底在做什么。在我上一个问题中,有人给了我一些帮助,但我觉得还是问一个具体的问题比较好,而不是试图一次性涵盖太多内容。

我需要发送的内容就是 'power=on/off''device=0,1,2''time=(秒数,整数形式)''pass=密码'。我可以把这些作为网址参数发送,或者通过POST请求发送到我上面提到的 power.py,这样就可以实现功能。

我希望能有一个简单明了的方法,从Salesforce发送这些数据到Flask,并让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请求来测试一些东西。

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

我可以发送类似这样的内容吗?

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

1 个回答

3

我不知道你怎么让Salesforce发送一个带有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)

当Salesforce访问这个网址 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"}'

撰写回答