如何将这些全局变量更改为非全局变量?

时间:2017-09-08 23:38:09

标签: python flask

我有这个小程序鹦鹉回复用户说的话。现在我使用两个全局变量来存储先前的变量状态并向其添加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)

1 个答案:

答案 0 :(得分:0)

最简单的解决方案可能是将数据存储在cookie中。如果数据非常小,您就不需要数据库,而且数据库的重要性不足以保证存储在服务器上。

另一个相关的可能性是将url中的变量状态编码为您的服务,并让服务为用户提供更新的URL以便在每次回复时单击。