游戏烧瓶计数器
Flask Counter for a Game
我正在 Flask 上创建一个游戏,并希望在整个会话中都有一个计数器。我为项目的总体大纲整理了一些伪代码。基本上它是一个脚本,从数据库中提取一个随机问题,收集用户输入,returns 正确答案,然后在用户输入路径上重新开始。我想添加一个无论路由功能如何都会出现的计数器。我查看了 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()
您已经提到 sessions,我认为它们是您问题的解决方案:
Flask-Session is an extension for Flask that adds support for
Server-side Session to your application.
这是一个在会话中执行此操作的示例。它存储三个计数器,一个用于对应用程序的总访问,两个用于访问个别路线。如果你调用 /A
三次,然后调用 /B
,它会给你
accessed B 1 times, accessed app 4 times
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()
会话的行为类似于字典,并且在所有路由中都可用。你可以简单地把你的柜台放在那里。
为了完整起见,没有会话的解决方案也是可能的:
原则上,flask 路由的行为就像 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
我不鼓励使用全局变量,它们会使您的代码很难阅读并且不是线程安全的。
我正在 Flask 上创建一个游戏,并希望在整个会话中都有一个计数器。我为项目的总体大纲整理了一些伪代码。基本上它是一个脚本,从数据库中提取一个随机问题,收集用户输入,returns 正确答案,然后在用户输入路径上重新开始。我想添加一个无论路由功能如何都会出现的计数器。我查看了 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()
您已经提到 sessions,我认为它们是您问题的解决方案:
Flask-Session is an extension for Flask that adds support for Server-side Session to your application.
这是一个在会话中执行此操作的示例。它存储三个计数器,一个用于对应用程序的总访问,两个用于访问个别路线。如果你调用 /A
三次,然后调用 /B
,它会给你
accessed B 1 times, accessed app 4 times
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()
会话的行为类似于字典,并且在所有路由中都可用。你可以简单地把你的柜台放在那里。
为了完整起见,没有会话的解决方案也是可能的: 原则上,flask 路由的行为就像 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
我不鼓励使用全局变量,它们会使您的代码很难阅读并且不是线程安全的。