烧瓶游戏

时间:2018-11-04 22:17:57

标签: python flask counter flask-session

我正在Flask上创建游戏,并希望在整个会话中都有一个计数器。我为项目的总体轮廓整理了一些伪代码。基本上,它是一个脚本,它从数据库中提取随机问题,收集用户输入,返回正确答案,然后从用户输入路径重新开始。我想添加一个无论路由功能如何都会出现的计数器。我查看了Flask会议,但在哪里或如何实施方面感到困惑……任何想法/建议?会议还是其他?

get_db_info():
    connects to a database

@app.route('/questions')
def user_input():
    collects user input and puts into variable

@app.route('/answers')
def results():
    if user input = results:
        print(correct!)
    elif:
        print(incorrect)
    renders back to user_input()

1 个答案:

答案 0 :(得分:1)

您已经提到sessions,我认为它们是解决您的问题的方法:

  

Flask-Session是Flask的扩展,增加了对   服务器端会话到您的应用程序。

这里是通过会话执行此操作的示例。它存储三个计数器,一个计数器用于访问该应用程序,而另外两个计数器用于访问单个路由。如果您先打三次/A,然后再打/B,它将给您

  

访问B 1次,访问应用4次

from flask import Flask, session
from flask_session import Session

app = Flask(__name__)
# Check Configuration section for more details
SESSION_TYPE = 'filesystem'
app.config.from_object(__name__)
Session(app)

@app.route('/')
def reset():
    session["counterA"]=0
    session["counterB"]=0
    session["counterTotal"]=0

    return "all counters were reset"

@app.route('/A')
def routeA():
    if not "counterA" in session:
        session["counterA"]=0

    if not "counterTotal" in session:
        session["counterTotal"]=0

    session["counterA"]+=1
    session["counterTotal"]+=1

    return "accessed A {} times, accessed app {} times".format(session["counterA"], session["counterTotal"])
@app.route('/B')
def routeB():
    if not "counterB" in session:
        session["counterB"] = 0

    if not "counterTotal" in session:
        session["counterTotal"] = 0

    session["counterB"] += 1
    session["counterTotal"] += 1

    return "accessed B {} times, accessed app {} times".format(session["counterB"], session["counterTotal"])


if __name__ == '__main__':
    app.run()

会话的行为类似于字典,并且在所有路由中都可用。您只需将柜台放在那里。

为了完整起见,没有会话的解决方案也是可行的: 原则上,烧瓶路由的行为就像python函数一样。 因此,以下方法将起作用:

counter = 0
@app.route('/questions')
def user_input():
    global counter
    print(counter)
    counter+=1

@app.route('/answers')
def results():
    global counter
    print(counter)
    counter+=1

我不鼓励使用全局变量,因为它们会使您的代码很难阅读并且也不是线程安全的。