Flask restful:请求返回错误的值



对于家里的一个小项目,我尝试设置一个简单的RESTful服务器。我遇到了一个问题,服务器会返回我所没有想到的值。

下面是一个描述我的问题的抽象示例:

# coding: utf-8
import platform as p
from flask import Flask, request
from flask_restful import Resource, Api
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
api = Api(app)
hosts = {"keyA": ["Altair", "Deneb"], "keyB": ["RB3"]}
def in_host_list(hostname, key="keyA"):
t_hosts = hosts["keyA"]
if (key == "keyB"):
t_hosts += hosts["keyB"]
return hostname in t_hosts
class MainHosts(Resource):
def get(self):
return {p.node(): in_host_list(p.node(), "keyA")}
class AllHosts(Resource):
def get(self):
return {p.node(): in_host_list(p.node(), "keyB")}
api.add_resource(MainHosts, '/mainhosts')
api.add_resource(AllHosts, '/allhosts')
if __name__ == "__main__":
app.run(host='0.0.0.0', port='5002', threaded=True)

我的问题如下。假设我已经启动了python脚本,但还没有请求。我的第一个请求看起来像这个

curl http://rb3:5002/mainhosts
{"RB3": false}

得到的回应是我所期望的。下一个请求如下。

curl http://rb3:5002/allhosts
{"RB3": true}

这也是意料之中的事。但当我尝试以下内容时,我得到了一个奇怪的回应。

curl http://rb3:5002/mainhosts
{"RB3": true}

我希望得到与第一次通话({"RB3": false}(相同的响应。即使我切换电脑并提出新的请求,我也会得到同样的结果。所以我想,那个烧瓶以某种方式储存了某种状态?只有当我重新启动python脚本时,这种行为才会改变。然后,第一个调用是正确的,但以下所有请求都会给我另一个超出预期的响应。

我做错了什么?起初我以为我正在访问cookie或会话。但当我切换到另一台计算机并尝试访问API时,我也会得到错误的数据显示。我已经仔细阅读了烧瓶和烧瓶的文档。我也读过关于应用程序上下文和请求上下文的文章,但我遗漏了一些内容。也许你们中的某个人可以给我一个有用的提示。

您更改了KeyA列表,并将KeyB列表附加到其中:

t_hosts = hosts["keyA"]
if (key == "keyB"):
t_hosts += hosts["keyB"]

这更改了列表的位置+=扩充赋值不仅仅是创建一个新列表对象的简单串联。您可以首先创建列表的副本,也可以通过串联创建新列表。

要创建副本,请在hosts["keyA"]:上调用list()

t_hosts = list(hosts["keyA"])
if key == "keyB":
t_hosts += hosts["keyB"]

或通过串联创建新列表,使用:

t_hosts = hosts["keyA"]
if key == "keyB":
t_hosts = t_hosts + hosts["keyB"]

相关内容

  • 没有找到相关文章

最新更新