我有这个小程序鹦鹉回复用户说的话。现在我使用两个全局变量来存储先前的变量状态并向其添加1。我想知道是否有人可以提出一些不涉及使用全局变量的方法。
注意:此事件没有UI或前端。它是谷歌家庭的webhook,所以它只是坐在服务器端来回发送东西。
import random, time, os, atexit
from datetime import datetime
from random import choice
from random import shuffle
from flask import Flask, current_app, jsonify
from flask_assistant import Assistant, ask, tell, event, context_manager, request
from flask_assistant import ApiAi
app = Flask(__name__)
assist = Assistant(app)
api = ApiAi(os.environ['DEV_ACCESS_TOKEN'], os.environ['CLIENT_ACCESS_TOKEN'])
random.seed()
interrupt_count = 0
frustration_level = 0
def reset_things():
global interrupt_count
interrupt_count = 0
print("!reset_things: {0}, {1}".format(interrupt_count, frustration_level))
@assist.action('greeting')
def hello_world():
speech = 'This is the unxepected machine'
return ask(speech)
@assist.action('fallback', is_fallback=True)
def say_fallback():
print(dir(Assistant.request))
resp = request['result']['resolvedQuery']
default_resp = "boogie boo"
# if the user said soemthing
if resp:
# update the global variable
global interrupt_count
interrupt_count+=1
global frustration_level
if not interrupt_count % 3:
frustration_level+=1
print("!fallback: {0}, {1}".format(interrupt_count, frustration_level))
print(parrot)
return ask(parrot)
else:
print(default_resp)
return(default_resp)
@assist.action('help')
def help():
speech = "I am the help section"
return ask(speech)
@assist.action('quit')
def quit():
reset_things()
speech = "Leaving program"
return tell(speech)
if __name__ == '__main__':
app.run(debug=True, use_reloader=False)
答案 0 :(得分:0)
最简单的解决方案可能是将数据存储在cookie中。如果数据非常小,您就不需要数据库,而且数据库的重要性不足以保证存储在服务器上。
另一个相关的可能性是将url中的变量状态编码为您的服务,并让服务为用户提供更新的URL以便在每次回复时单击。