gpt4 book ai didi

python - 在 Python Flask 中维护 session 数据

转载 作者:行者123 更新时间:2023-12-05 07:27:54 26 4
gpt4 key购买 nike

我有一个将 JSON 数据发送到服务器的客户端。此 JSON 数据包含 budgetepsilon 值。服务器接收数据并检查 used_budget 是否为 None 或者换句话说,如果这是来自客户端的第一个请求。如果是这样,它会将 used_budget 初始化为 0.0。

条件是每次客户端发送JSON负载时,epsilon值被添加到used_budget并且used_budget预算。如果 used_budget 小于 budget,则服务器查询数据库并将一些结果返回给客户端,否则服务器应停止接受来自客户端的请求。

问题:当我从客户端发送初始请求时,会初始化一个新 session 并添加 epsilon。服务器按预期将结果返回给客户端。但是,当我从客户端发送另一个请求时,服务器没有将其视为同一 session ,而是初始化了一个新 session ,并且 used_budget 值再次设置为 0.0。条件检查永远不会发生。

这是服务器端代码:

class GetParams(Resource):
def get(self):

client_request = json.loads(list(dict(request.args).keys())[0]) # Stores the request in JSON format
budget = client_request['budget']
epsilon = client_request['epsilon']
used_budget = session.get('used_budget') # used_budget used a session variable

# If Client sends the first request then initialize used_budget to 0.0
if used_budget == None:
set_used_budget()

# Check if client has budget for sending queries for a session
if (session['used_budget'] < float(budget)):
session['used_budget'] = session.get('used_budget') + float(epsilon)
result = write_file(client_request) # Write request to file and store the returned query result
print("used budget " + str(session['used_budget']))
return result # Return the query result to the client
else:
error_message = "Budget exceeded - Cannot process queries"
return error_message

api.add_resource(GetParams, '/data') # Route for get()
if __name__ == '__main__':
app.run(port='5890', threaded=True)

这是客户端代码:

# Client sends this data in url
data = {
'query': 'SELECT count(*) FROM accounts',
'epsilon': '1.0',
'budget': '2.0',
}

# Localhost url
url = 'http://127.0.0.1:5890/data'

# Client sends Get request
session = requests.Session()

resp= session.get(url, params=json.dumps(data))

# Client prints the data returned by the server in JSON
print(resp.json())

# Client prints the response code
print(resp)

当我从浏览器运行它时,代码工作正常(即,当我使用两个不同的浏览器时, session 保持不变)但是当我使用 IDE 从客户端 ping 服务器时,一个新的 session 开始了。谁能告诉我我在这里做错了什么?

最佳答案

这是因为 flask session 的工作方式略有不同。 session 数据与响应一起传递给客户端,并作为 session cookie 存储在客户端上。当您从浏览器发送请求时,浏览器会将 session cookie 附加到新请求。当您使用 IDE 客户端发出请求时,情况并非如此。 IDE 客户端不维护任何 session cookie,因此每次创建新 session 时。

关于python - 在 Python Flask 中维护 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53705014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com